JDBC、datasource、连接池、数据库驱动、持久层框架之间的区别

这篇具有很好参考价值的文章主要介绍了JDBC、datasource、连接池、数据库驱动、持久层框架之间的区别。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、数据库

数据库,就是按照数据结构来组织、存储和管理数据的“仓库”。
数据库分为关系型数据库(sql数据库)与非关系型数据库(no-sql数据库),两者的区别在于是否使用SQL语句作为操作的方式和方法。我们常见的数据库多属于关系型数据库,比如MySql数据库、PostgreSql,oracle数据库。

2、数据库驱动

数据库驱动是不同数据库开发商(比如oracle mysql等)为了某一种开发语言环境(比如java)能够实现数据库调用而开发的一个程序,
数据库驱动的作用相当于一个翻译人员,将Java中对数据库的调用语言翻译成数据库自己的数据库语言,当然这个翻译(数据库驱动)是由各个开发商针对统一的接口自定义开发的。
常用的驱动:

1、MySQL
驱动类的名字:com.mysql.jdbc.Driver
JDBC URL(连接地址):jdbc:mysql://dbip:port/databasename

  • dbip :为数据库服务器的IP地址,如果是本地可写:localhost或127.0.0.1。
  • port :为数据库的监听端口,需要看安装时的配置,缺省为3306。
  • databasename:数据库的名字。

2、SQL Server数据库
驱动类的名字:com.microsoft.jdbc.sqlserver.SQLServerDriver
JDBC URL:jdbc:microsoft:sqlserver://dbip:port;DatabaseName=databasename

  • dbip :为数据库服务器的IP地址,如果是本地可写:localhost或127.0.0.1。
  • port :为数据库的监听端口,需要看安装时的配置,缺省为1433。
  • databasename:数据库的名字。

3、Oracle数据库
驱动类的名字:oracle.jdbc.driver.OracleDriver
JDBC URL:jdbc:oracle:thin:@dbip:port:databasename

  • dbip :为数据库服务器的IP地址,如果是本地可写:localhost或127.0.0.1。
  • port:为数据库的监听端口,需要看安装时的配置,缺省为1521。
  • databasename:为数据库的SID,通常为全局数据库的名字。

如下图就是没有JDBC之前,java开发人员为了操作不同的数据库需要维护不同数据库的驱动程序
image.png

3、JDBC

JDBC的全称是Java数据库连接(Java Database connect),它是一套用于执行SQL语句的Java API。应用程序可通过这套API连接到关系数据库,并使用SQL语句来完成对数据库中数据的查询、更新和删除等操作。简单地说就是 连接 操作 数据库的组件。

public static void main(String[] args) throws Exception {
        //1. 加载数据库驱动
        Class.forName("com.mysql.jdbc.Driver");
        //2. 通过驱动管理类获取数据库连接
        Connection conn = DriverManager.getConnection(url,username,password);
        //3. 通过Connection对象创建Statement对象
        Statement stmt = conn.createStatement();
        //4. 执行sql语句
        ResultSet rs = preparedStatement.executeQuery("SELECT * FROM ...") ;
        //5. 遍历结果集
        while(rs.next()){    
         String name = rs.getString("name") ;      
         }   
        //6. 关闭数据库连接,回收数据库资源
        // 关闭顺序:依次关闭ResultSet、Statement、Connection等资源。
        if(rs !=null){   // 关闭记录集    
           try {
              rs.close();
           } catch (SQLException e) {
              e.printStackTrace();
           }
        }    
        if(stmt !=null){   // 关闭声明    
           try {
              stmt.close();
           } catch (SQLException e) {
              e.printStackTrace();
           }
        }
        if(conn !=null){  // 关闭连接对象    
           try {
              conn.close();
           } catch (SQLException e) {
              e.printStackTrace();
           }
        }
}

应用程序使用JDBC访问数据库的方式如下图所示:
image.png
从上图可以看出,应用程序使用JDBC访问特定的数据库时,需要与不同的数据库驱动进行连接。由于不同数据库厂商提供的数据库驱动不同,因此,为了使应用程序与数据库真正建立连接,JDBC需要提供访问数据库的API和封装与各种数据库服务器通信的细节。

4、datasource

数据源技术是Java操作数据库的一个很关键技术,流行的持久化框架都离不开数据源的应用。
数据源提供了一种 简单获取数据库连接的方式,并能在内部通过一个 池的机制来复用数据库连接,这样就大大减少创建数据库连接的次数,提高了系统性能。
需要数据源的原因:由于使用jdbc建立连接和销毁太过于浪费资源,因此需要一套高效的与数据库建立连接的组件,那就是数据源,数据源可以创建连接池。
常见的有DBCP、C3P0、druid、hikariCP等等

5、数据库连接池

数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个。连接池技术尽可能多地重用了内存的资源,大大节省了内存,提高了服务器的服务效率,能够支持更多的客户服务。通过使用连接池,将大大提高程序运行效率,同时,我们可以通过其自身的管理机制来监视数据库连接的数量、使用情况等。
以访问MySQL为例,执行一个SQL命令。
不使用连接池:
JDBC、datasource、连接池、数据库驱动、持久层框架之间的区别
不使用数据库连接池的步骤:

TCP建立连接的三次握手
MySQL认证的三次握手
真正的SQL执行
MySQL的关闭
TCP的四次握手关闭

可以看到,为了执行一条SQL,却多了非常多我们不关心的网络交互。

优点 缺点
实现简单 网络IO较多 数据库的负载较高
响应时间较长 响应时间较长
应用频繁的创建连接和关闭连接
在关闭连接后,会出现大量TIME_WAIT 的TCP状态

使用连接池流程:
JDBC、datasource、连接池、数据库驱动、持久层框架之间的区别
使用数据库连接池的步骤:

第一次访问的时候,需要建立连接。 但是之后的访问,均会复用之前创建的连接,直接执行SQL语句。

优点:

  1. 较少了网络开销
  2. 系统的性能会有一个实质的提升
  3. 没了麻烦的TIME_WAIT状态

6、持久层框架

6.1、ORM

对象-关系映射(Object-Relational Mapping,简称ORM),面向对象的开发方法是当今企业级应用开发环境中的主流开发方法,关系数据库是企业级应用环境中永久存放数据的主流数据存储系统。对象关系数据是业务实体的两种表现形式, 业务实体在内存中表现为对象,在数据库中表现为关系数据。内存中的对象之间存在关联和继承关系,而在数据库中,关系数据无法直接表达多对多关联和继承关系。因此,对象-关系映射(ORM)系统一般以中间件的形式存在,主要实现程序对象到关系数据库数据的映射
对象-关系映射解释:
A . 简单:ORM以最基本的形式建模数据。比如ORM会将MySQL的一张表映射成一个Java类(模型),表的字段就是这个类的成员变量
B . 精确:ORM使所有的mysql数据表都按照统一的标准精确地映射成java类,使系统在代码层面保持准确统一
C . 易懂:ORM使数据库结构文档化。比如MySQL数据库就被ORM转换为了java程序员可以读懂的java类,java程序员可以只把注意力放在他擅长的java层面(当然能够熟练掌握MySQL更好)
D. 易用:ORM包含对持久类对象进行CRUD操作的API,例如create(), update(), save(), load(), find(), find_all(), where()等,也就是讲sql查询全部封装成了编程语言中的函数,通过函数的链式组合生成最终的SQL语句。通过这种封装避免了不规范、冗余、风格不统一的SQL语句,可以避免很多人为Bug,方便编码风格的统一和后期维护。
JDBC、datasource、连接池、数据库驱动、持久层框架之间的区别

6.2、JdbcTemplate

JDBC也提供了一套操作数据库进行增删改查的接口,但是过于繁琐。
JdbcTemplate是spring提供访问jdbc的一个模板,是Spring对JDBC的封装,目的是使JDBC更加易于使用。
JdbcTemplate是Spring的一部分,它处理了资源的建立和释放,帮助我们避免一些常见的错误,比如忘了总要关闭连接。它运行核心的JDBC工作流,如Statement的建立和执行,而我们只需要提供SQL语句和提取结果,相比较于传统的JDBC的操作简单很多。
JdbcTemplate的用法:

JdbcTemplate jdbcTemplate = new JdbcTemplate(DataSourceUtils.getDataSource());
String sql = "INSERT INTO product VALUES (NULL, ?, ?);";
jdbcTemplate.update(sql, "iPhone3GS", 3333);

6.3、MyBatis

Mybatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层(半)ORM
框架
Mybatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。
在SpringBoot中,MybatisAutoConfiguration类。可以看到数据源DataSource 注入到SqlSessionFactory 中,然后根据SqlSessionFactory 创建SqlSessionTemplate。这就完成了自动装配,我们就可以直接@Autowired直接使用

  @Bean
  @ConditionalOnMissingBean
  public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
    SqlSessionFactoryBean factory = new SqlSessionFactoryBean();
    factory.setDataSource(dataSource);
    //...
  }
  
  @Bean
  @ConditionalOnMissingBean
  public SqlSessionTemplate sqlSessionTemplate(SqlSessionFactory sqlSessionFactory) {
    ExecutorType executorType = this.properties.getExecutorType();
    if (executorType != null) {
      return new SqlSessionTemplate(sqlSessionFactory, executorType);
    } else {
      return new SqlSessionTemplate(sqlSessionFactory);
    }
  }

Mybatis的组件:
JDBC、datasource、连接池、数据库驱动、持久层框架之间的区别
各组件功能介绍:

  • Mybatis的配置文件:SqlMapConfig.xml是Mybatis的全局配置文件,主要配置数据源、事务、加载映射文件等,它的名称可以是任意(最好见名知意)。Mapper.xml主要是配置Statement的相关信息,如SQL语句。
  • SqlSessionFactoryBuilder:会根据XML配置或是Java配置来生成SqlSessionFactory对象.采用建造者模式(简单来说就是分步构建一个大的对象,例如建造一个大房子,采用购买砖头、砌砖、粉刷墙面的步骤建造,其中的大房子就是大对象,一系列的建造步骤就是分步构建)。
  • SqlSessionFactory:用于生成SqlSession,可以通过 SqlSessionFactory.openSession() 方法创建 SqlSession 对象。使用工厂模式(简单来说就是我们获取对象是通过一个类,由这个类去创建我们所需的实例并返回,而不是我们自己通过new去创建)。
  • SqlSession:相当于JDBC中的 Connection对象,可以用 SqlSession 实例来直接执行被映射的 SQL 语句,也可以获取对应的Mapper。
  • Executor:MyBatis 中所有的 Mapper 语句的执行都是通过 Executor 执行的。(Mapper:由XML文件和Java接口组成,根据XML中配置的映射信息执行对应的SQL语句并返回执行结果。)
  • Mapper接口:数据操作接口也就是通常说的 DAO 接口,要和 Mapper 配置文件中的方法一一对应,也就是必须和Mapper.xml中的增删改查标签Id一致。
  • Mapper配置:用于组织具体的查询业务和映射数据库的字段关系,可以使用 XML 格式(Mapper.xml)或 Java 注解格式来实现。
  • MappedStatement:作用是封装了Statement的相关信息,包括SQL语句、输入参数和输出结果等等。

Mybatis执行流程:

  1. 首先是加载Mybatis的全局配置文件,随后会加载SQL 映射文件或者是注解的相关 SQL 内容。
  2. 创建会话工厂,MyBatis 通过读取配置文件的信息来构造出会话工厂(SqlSessionFactory)。
  3. 创建会话,根据会话工厂,MyBatis 就可以通过它来创建会话对象(SqlSession),会话对象是一个接口,该接口中包含了对数据库操作的增、删、改、查方法。
  4. 创建执行器,因为会话对象本身不能直接操作数据库,所以它使用了一个叫做数据库执行器(Executor)的接口来帮它执行操作。
  5. 封装 SQL 对象,在这一步,执行器将待处理的 SQL 信息封装到一个对象中(MappedStatement),该对象包括 SQL 语句、输入参数映射信息(Java 简单类型、HashMap 或 POJO)和输出结果映射信息(Java 简单类型、HashMap 或 POJO)。
  6. 操作数据库,拥有了执行器和 SQL 信息封装对象就使用它们访问数据库了,最后再返回操作结果,结束流程。

6.4、JPA

JPA的全称是Java Persistence API, 即Java 持久化API,是SUN公司推出的一套基于ORM的规范
JPA规范本质上就是一种ORM规范,注意不是ORM框架——因为JPA并未提供ORM实现,它只是制订了一些规范,提供了一些编程的API接口,但具体实现则由服务厂商来提供实现。JPA和Hibernate的关系就像JDBC和JDBC驱动的关系,JPA是规范,Hibernate除了作为ORM框架之外,它也是一种JPA实现。
JDBC、datasource、连接池、数据库驱动、持久层框架之间的区别
Spring Data JPA 是 Spring 基于 ORM 框架、JPA 规范的基础上封装的一套JPA应用框架,底层还是用的实现jpa的hibernate技术,可使开发者用极简的代码即可实现对数据库的访问和操作
JPA框架的用法:
定义对象的操作的接口,继承JpaRepository核心接口。

import com.boot.jpa.entity.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
@Repository
public interface UserRepository extends JpaRepository<User,Integer> {

    // 但条件查询
    User findByAge(Integer age);
    // 多条件查询
    User findByNameAndAge(String name, Integer age);
    // 自定义查询
    @Query("from User u where u.name=:name")
    User findSql(@Param("name") String name);
}

7、总结

JDBC: 连接和操作数据库的原生API,接近底层代码。
JDBC和数据源: 数据源是jdbc连接数据库的实现。
数据源和数据库驱动: 连接不同的数据库,就要使用不同的驱动。
数据源和连接池: 数据源会利用底层jdbc生成一些闲置的连接放入连接池,以供访问数据库时使用。
JdbcTemplate、MyBatis和数据源,操作数据库也是需要先连接到数据库的,所以要给jdbcTemplate、MyBatis设置数据源,以便jdbcTemplate、MyBatis能使用数据源的连接池。
jpa和Hibernate: Hibernate根据jpa规范实现的。底层也是利用数据源和JDBC,访问数据库。
JDBC和jpa:本质上,jdbc和jpa这两个东西不是一个层次的,

JDBC是数据库的统一接口标准。
jpa是ORM框架的统一接口标准。
用法有区别: jdbc更注重数据库,orm则更注重于java代码,
但是实际上jpa实现的框架底层还是用jdbc去和数据库打交道。

参考:文章来源地址https://www.toymoban.com/news/detail-452922.html

  1. https://www.cnblogs.com/yanze/p/9714703.html
  2. https://www.zhihu.com/question/45993333
  3. https://juejin.cn/post/6844903475239714823
  4. https://blog.csdn.net/An1090239782/article/details/107159335
  5. https://www.cnblogs.com/tanghaorong/p/13856465.html#:~:text=MyBatis%20%E6%98%AF%E6%94%AF%E6%8C%81%E5%AE%9A%E5%88%B6%E5%8C%96,%E5%8F%82%E6%95%B0%E4%BB%A5%E5%8F%8A%E8%8E%B7%E5%8F%96%E7%BB%93%E6%9E%9C%E9%9B%86%E3%80%82
  6. https://blog.csdn.net/u013541707/article/details/113182157
  7. https://blog.csdn.net/papima/article/details/78219000

到了这里,关于JDBC、datasource、连接池、数据库驱动、持久层框架之间的区别的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • JDBC数据库连接

    目录 引言  一,基本概念 二,常用操作步骤 三,连接操作         JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种 关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建 更高级的工具

    2024年02月13日
    浏览(43)
  • JDBC入门数据库连接

    JDBC(Java Database Connectivity)是Java程序与数据库进行交互的一种标准接口,它提供了一种简单的方式来连接和操作数据库。在使用JDBC之前,需要先了解以下几个概念: JDBC Driver :JDBC驱动程序是一个Java类,用于将Java应用程序与特定数据库管理系统(DBMS)连接。JDBC驱动程序分

    2023年04月25日
    浏览(45)
  • 数据库——JDBC基本连接步骤

    目录 JDBC概念: JDBC保姆级连接步骤: JDBC连接中用到的对象详解: 1.DriverManager对象(驱动管理对象) 2.Connection对象(连接对象) 3.Statement对象(执行SQL语句的对象) 4.ResultSte对象(结果集) JDBC的全称是:Java数据库连接(Java DataBase Connectivity),它是一套用于执行SQL语句的Jav

    2024年02月07日
    浏览(59)
  • 通过JDBC连接数据库并用Java把数据写入数据库

    目录 1.新建项目 2.在src包下新建lib包,用来存放jar包(下载对应jar包复制到lib包里) 3.右键导入的jar包,找到并单击\\\"添加到库\\\"(add....) 4.在src包下新建bean包,新建class类 5.class类中写数据库表中对应的列名的set get方法、空参、有参(String方法)注意:类名为私有类(private),新建类时数

    2024年02月02日
    浏览(64)
  • MySQL数据库,JDBC连接数据库操作流程详细介绍

    在学完 MySQL 和 Java 后,我们通常会尝试使用 Java编译器 连接 MySQL数据库,从而达到使用编译器来操作数据库的效果。连接的这个过程会用 JDBC 相关知识,因此我把 JDBC 包的下载及导入流程,以及 JDBC 的使用流程整理下来分享给大家。 目录 1. 啥是JDBC? 2. JDBC依赖包 2.1 依赖包

    2024年02月06日
    浏览(96)
  • JDBC p5 数据库连接池

    传统的JDBC数据库使用 DriverManager 来获取, 每次向数据库建立连接的时候都要将 Connection 加载到内存中,再验证IP地址,用户名和密码(0.05 ~ 1 s 时间) 。需要数据库连接的时候,就向数据库要求一个,频繁的进行数据库连接操作将占用很多的系统资源,容易造成服务器崩溃。

    2024年02月15日
    浏览(47)
  • eclipse使用jdbc连接数据库

    下载和mysql对应版本的jar包。 我的mysql下载的8.0.13版本的,所以下载8.0.13的jar包。官网下载地址: https://dev.mysql.com/downloads/connector/j/?os=26 (如果需要下载历史版本,点击 archievs) 下载之后,解压目录,获得jar包。 导入jarb包。 第一步:在eclipse中新建工程JDBC,建立一个lib目录

    2024年02月11日
    浏览(50)
  • JAVA连接数据库 JDBC编程

    提供修改数据库和查询数据库的代码,两者只有很细微的差别         注意在进行连接数据库首先你得下载你对应MYSQL版本的JDBC驱动包,比如MYSQL8.0版本的你就要下载MYSQL8.0版本的JDBC驱动包,MYSQL5.1版本的你就要下载MYSQL5.1版本的JDBC驱动包 我下载的8.0版本的驱动包就是这个

    2024年02月15日
    浏览(54)
  • Java-JDBC连接数据库

    目录 一、JDBC开发步骤 1.Java程序连接数据库 1.1引入MySQL驱动包 1.2Java连接MySQL步骤 2 实现增删改查操作 2.1 添加数据 2.2 修改数据 2.3 删除数据 2.4 查询数据 二、JDBC处理相关问题 1 解决SQL注入问题 1.1、问题演示 1.2、解决问题 2 JDBC事务处理 3 获取自增长键值 4 批处理操作 1.1 引入

    2024年02月09日
    浏览(46)
  • 【JDBC】Java连接MySQL数据库

    数据库编程指的是通过编程语言与数据库进行交互和操作的过程,包括使用编程语言创建、连接、查询、更新和删除数据库中的数据,以及管理数据库结构和其他相关工作等。 另外,不同的数据库,对应不同的编程语言提供了不同的数据库驱动包,如:MySQL提供了Java的驱动包

    2024年02月15日
    浏览(115)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包