简单分析jdbc、datasource数据源、数据库驱动,连接池,jdbcTemplate,mybatis、JPA、Hibernate的区别

本文详细分析了数据库操作的相关概念,包括jdbc、数据源(如HikariCP、Druid)、JdbcTemplate、MyBatis、JPA和Hibernate之间的区别。JDBC是Java数据库连接接口,数据源用于高效管理数据库连接,JdbcTemplate简化了JDBC的使用,MyBatis提供了更高级的映射和SQL操作,而JPA和Hibernate分别是ORM规范和其实现,提供面向对象的数据库操作方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

进行数据库操作的时候,经常出现这些名词:jdbc、jdbcTemplate,datasource数据源、数据库驱动,mybatis、JPA、Hibernate。
区分他们的含义和所处位置十分必要,现在分析如下

1、数据库

数据库,就是我们常用的关系型数据库,比如mysql数据库、postgresql,oracle数据库。

2、jdbc

jdbc,是Java提供的一个操作数据库的API,提供了很多的接口,就是一种规范。
定义如下:

数据库连接,(Java Database Connectivity,简称JDBC)是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法。

用大白话说就是,【连接】和【操作】数据库的最基本组件。记住,2个点,一个是连接数据库,一个是可以操作数据库,进行增删改查。

public static void main(String[] args) throws Exception {
        //1.加载驱动程序
        Class.forName("com.mysql.jdbc.Driver");
        //2. 获得数据库连接
        Connection conn = DriverManager.getConnection(URL, USER, PASSWORD);
        //3.操作数据库,实现增删改查
        Statement stmt = conn.createStatement();
        ResultSet rs = stmt.executeQuery("SELECT user_name, age FROM imooc_goddess");
        //如果有数据,rs.next()返回true
        while(rs.next()){
            System.out.println(rs.getString("user_name")+" 年龄:"+rs.getInt("age"));
        }
    }
3、【重连接】——数据源

配置数据源,就是建立与数据库的【连接】。
常见的数据源有,hikariCP、druid、tomcat-jdbc、dbcp、c3p0等

为什么要使用数据源建立连接的原因之一是:由于使用jdbc建立连接和销毁太过于浪费资源,因此需要一套高效的与数据库建立连接的组件,那就是数据源,数据源可以创建连接池。

数据源建立多个数据库连接,这些数据库连接会保存在数据库连接池中,当需要访问数据库时,只需要从数据库连接池中,获取空闲的数据库连接,当程序访问数据库结束时,数据库连接会放回数据库连接池中。

连接池,是数据源里面的一种技术,用于存放空闲的连接,以备不时之需。

数据库驱动,上面数据源只是说明它是连接数据库的,而数据库有很多,驱动就是与哪种数据库进行连接时所需要的驱动。即,不同的数据库,数据源要使用相对应的数据库驱动。

oracle
jdbc.driver=oracle.jdbc.driver.OracleDriver
jdbc.url=jdbc:oracle:thin:@172.28.28.168:1521:orcl
mybatis
(6版本之后是com.mysql.cj.jdbc.Driver)
#jdbc.driver=com.mysql.jdbc.Driver
#jdbc.url=jdbc:mysql://172.19.19.230:3306/platformstandrad_v2?useUnicode=true&characterEncoding=UTF-8
postgresql数据库
#jdbc.driver=org.postgresql.Driver
#jdbc.url=jdbc:postgresql://localhost:5432/db_person

4、【重操作】jdbcTemplate

JDBC也提供了一套操作数据库进行增删改查的接口,但是过于繁琐。

JdbcTemplate是spring提供访问jdbc的一个模板。dbcTemplate是Spring对JDBC的封装,目的是使JDBC更加易于使用。

JdbcTemplate是Spring的一部分。JdbcTemplate处理了资源的建立和释放。他帮助我们避免一些常见的错误,比如忘了总要关闭连接。他运行核心的JDBC工作流,如Statement的建立和执行,而我们只需要提供SQL语句和提取结果。

Spring中

JdbcTemplate类里面的构造方法

    public JdbcTemplate(DataSource dataSource) {
        this.setDataSource(dataSource);
        this.afterPropertiesSet();
    }

JdbcTemplate的简单举例

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

SpringBoot,自动装配。
可以看到,加入数据源和一些Jdbc参数即可。

@Configuration(proxyBeanMethods = false)
@ConditionalOnMissingBean(JdbcOperations.class)
class JdbcTemplateConfiguration {
	@Bean
	@Primary
	JdbcTemplate jdbcTemplate(DataSource dataSource, JdbcProperties properties) {
		JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
		JdbcProperties.Template template = properties.getTemplate();
		jdbcTemplate.setFetchSize(template.getFetchSize());
		jdbcTemplate.setMaxRows(template.getMaxRows());
		if (template.getQueryTimeout() != null) {
			jdbcTemplate.setQueryTimeout((int) template.getQueryTimeout().getSeconds());
		}
		return jdbcTemplate;
	}
}
5、【重操作】MyBatis

JDBC也提供了一套操作数据库进行增删改查的接口,但是过于繁琐。

MyBatis是对JDBC的封装,即使CRUD操作变得更加简单了。

MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层(半)ORM框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装。
MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。

优秀持久层(半)ORM框架,之所以说是半,是因为我们还是可以直接在mapper写sql。

在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);
    }
  }
6、【重操作】JPA

JPA Java Persistence API的简称,中文名Java持久层API。
JPA是一套ORM规范,然提供接口,让ORM框架去实现它
Hibernate实现了JPA规范。
spring data jpa是对jpa规范的再次抽象,底层还是用的实现jpa的hibernate技术。

7、区别

jdbc,连接和操作数据库的原生API,接近底层代码。

jdbc和数据源,数据源是jdbc连接数据库的实现。

数据源和数据库驱动,连接不同的数据库,就要使用不同的驱动。

数据源和连接池,数据源会利用底层jdbc生成一些闲置的连接放入连接池,以供访问数据库时使用。

jdbcTemplate、MyBatis和数据源,操作数据库也是需要先连接到数据库的,所以要给jdbcTemplate、MyBatis设置数据源,以便jdbcTemplate、MyBatis能使用数据源的连接池。

jdbc和jpa,本质上,jdbc和jpa这两个东西不是一个层次的,

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

jpa和Hibernate,Hibernate根据jpa规范实现的。底层也是利用数据源、再jdbc,访问数据库。

【完,喜欢就点个赞呗】

正在去往BAT的路上修行

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值