对 JdbcTemplate 的理解

在研究 005 Spring Boot 使用 JdbcTemplate 操作数据库时,使用到了 JdbcTemplate 这个类,当时对他何时被赋值很不好理解,在查阅相关文档后,得出一个基本的理解:

JdbcTemplate 引入的目的?

首先,JdbcTemplate 是 Spring 对 JDBC 的一层的封装,封装的原因是因为,JDBC 需要程序员加载数据驱动、创建连接、释放连接、异常处理等一系列繁琐的动作,所以 JdbcTemplate 就对这层做了封装,从而使程序员无需关注加载驱动、释放资源、异常处理等一系列操作,只需要提供 sql 语句并且提取最终结果即可,大大方便开发,提高开发效率。

JdbcTemplate 实现需要哪些组件?

直观的方法,我们把项目跑起来,在 idea 上设置断点,查看 jdbcTemplate 变量的值,如下图:

file

我们可以看到 jdbcTemplate 里有个 dataSource 成员,其类型为 HikariDataSource , jdbcUrl 为我们配置中的值:

  1. JdbcTemplate 是数据库操作的一个工具,封装了原始的 JDBC
  2. JdbcTemplate 有一个 DataSource,Spring Boot 默认使用的是 HiKariCP
  3. HiKariCP 是一个数据源,其同时含有数据库连接池功能,其层次与 Druid 一致

Spring Boot 是如何加载 JdbcTemplate 的?

在 Spring 中使用 JdbcTemplate 是这样的:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
       http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">

    <!-- 数据库连接池 -->
    <bean id="dataSource" class="com.zaxxer.hikari">
        <property name="url" value="jdbc:mysql:///user_db" />
        <property name="username" value="root" />
        <property name="password" value="" />
        <property name="driverClassName" value="com.mysql.cj.jdbc.Driver" />
    </bean>

    <!-- JdbcTemplate对象 -->
    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <!--注入dataSource属性-->
        <property name="dataSource" ref="dataSource"></property>
    </bean>

    <!-- 组件扫描 -->
    <context:component-scan base-package="JDBC"></context:component-scan>

</beans>

beans 中明确配置了 dataSource 和 jdbcTemplate,dataSource 是 jdbcTemplate 的属性,同时在代码层:

  1. 在 DAO 层用 @Repository 注解
  2. 在声明 jdbcTemplate 时,用了 @Autowired 注解
    Spring 在启动时,就会根据 beans 的配置文件将相应的值注入到代码中。

以上的操作,甚至包括xml配置都由 Spring Boot 自动完成。(需要配置文件配置相关数据库参)。

与 JdbcTemplate 同层次的工具有哪些?
Hiberate、JAP、Mybatis、JOOQ 等,后面我们再继续研究这些。

发表评论