Spring JdbcTemplate(使用详解)

企业级应用开发中,很少有人直接使用原生的 JDBC API 进行开发,因为使用 JDBC API 对数据库进行操作十分繁琐,例如我们需要手动控制数据库连接的开启,异常处理、事务处理、最后还要手动关闭连接释放资源等等。

Spring 提供了一个 Spring JDBC 模块,它对 JDBC API 进行了封装,其的主要目的降低 JDBC API 的使用难度,以一种更直接、更简洁的方式使用 JDBC API。

使用 Spring JDBC,开发人员只需要定义必要的参数、指定需要执行的 SQL 语句,即可轻松的进行 JDBC 编程,对数据库进行访问。

驱动的加载、数据库连接的开启与关闭、SQL 语句的创建与执行、异常处理以及事务处理等繁杂乏味的工作,则都是由 Spring JDBC 完成的。Spring JDBC 提供了多个实用的数据库访问工具,以简化 JDBC 的开发,其中使用最多就是 JdbcTemplate。

JdbcTemplate

JdbcTemplate 是 Spring JDBC 核心包(core)中的核心类,它可以通过配置文件、注解、Java 配置类等形式获取数据库的相关信息,实现了对 JDBC 开发过程中的驱动加载、连接的开启和关闭、SQL 语句的创建与执行、异常处理、事务处理、数据类型转换等操作的封装。我们只要对其传入SQL 语句和必要的参数即可轻松进行 JDBC 编程。

JdbcTemplate 的全限定命名为 org.springframework.jdbc.core.JdbcTemplate,它提供了大量的查询和更新数据库的方法,如下表所示。

方法 说明
public int update(String sql) 用于执行新增、更新、删除等语句; * sql:需要执行的 SQL 语句; * args 表示需要传入到 SQL 语句中的参数。
public int update(String sql,Object... args) 用于执行新增、更新、删除等语句; * sql:需要执行的 SQL 语句; * args 表示需要传入到 SQL 语句中的参数。
public void execute(String sql) 可以执行任意 SQL,一般用于执行 DDL 语句; * sql:需要执行的 SQL 语句; * action 表示执行完 SQL 语句后,要调用的函数。
public T execute(String sql, PreparedStatementCallback action) 可以执行任意 SQL,一般用于执行 DDL 语句; * sql:需要执行的 SQL 语句; * action 表示执行完 SQL 语句后,要调用的函数。
public <T> List<T> query(String sql, RowMapper<T> rowMapper, @Nullable Object... args)
public <T> List<T> query(String sql, RowMapper<T> rowMapper, @Nullable Object... args) 用于执行查询语句; * sql:需要执行的 SQL 语句; * rowMapper:用于确定返回的集合(List)的类型; * args:表示需要传入到 SQL 语句的参数。
public <T> T queryForObject(String sql, RowMapper<T> rowMapper, @Nullable Object... args) 用于执行查询语句; * sql:需要执行的 SQL 语句; * rowMapper:用于确定返回的集合(List)的类型; * args:表示需要传入到 SQL 语句的参数。
public int\[\] batchUpdate(String sql, List<Object\[\]> batchArgs, final int\[\] argTypes) 用于批量执行新增、更新、删除等语句; * sql:需要执行的 SQL 语句; * argTypes:需要注入的 SQL 参数的 JDBC 类型; * batchArgs:表示需要传入到 SQL 语句的参数。

在 src 目录下创建一个 jdbc.properties,并在该配置文件中对数据库连接信息进行配置。

复制代码
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/spring_jdbc_db
jdbc.username=root
jdbc.password=root

在 src 目录下创建一个 XML 配置文件 Beans.xml,配置内容如下。

html 复制代码
<?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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
    http://www.springframework.org/schema/context
            http://www.springframework.org/schema/context/spring-context.xsd">
    <!--开启组件扫描-->
    <context:component-scan base-package="com.xiaorizi"></context:component-scan>
    <!--引入 jdbc.properties 中的配置-->
    <context:property-placeholder location="classpath:jdbc.properties"></context:property-placeholder>
    <!--定义数据源 Bean-->
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <!--数据库连接地址-->
        <property name="url" value="${jdbc.url}"/>
        <!--数据库的用户名-->
        <property name="username" value="${jdbc.username}"/>
        <!--数据库的密码-->
        <property name="password" value="${jdbc.password}"/>
        <!--数据库驱动-->
        <property name="driverClassName" value="${jdbc.driver}"/>
    </bean>
    <!--定义JdbcTemplate Bean-->
    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <!--将数据源的 Bean 注入到 JdbcTemplate 中-->
        <property name="dataSource" ref="dataSource"></property>
    </bean>
   
</beans>

在以上配置中,我们共定义了两个 Bean,

  • dataSource 为数据库连接池对象的 Bean。
  • jdbcTemplate 则为 JdbcTemplate 的 Bean,它由一个名为 datasSource 的属性。

Spring 默认使用 DriverManagerDataSource 对数据库连接池进行管理,我们可以在 Spring 的 XML 配置文件中定义 DriverManagerDataSource 的 Bean,并注入到 JdbcTempate 的 Bean 中。

在 dataSource 中,定义了 4 个连接数据库的属性,如下表所示。

属性名 说明
driverClassName 所使用的驱动名称,对应驱动 JAR 包中的 Driver 类
url 数据源所在地址
username 访问数据库的用户名
password 访问数据库的密码
相关推荐
zcn1263 小时前
exists子查询改写思考
数据库·sql·sql优化改写
AI人工智能+电脑小能手3 小时前
大白话说Java设计模式-45-解释器模式(源码剖析篇)
java·设计模式·解释器模式·源码分析·pattern·spel·javacc
吴声子夜歌3 小时前
Java——开发中通用的方法和准则(二)
java·开发语言·php
betazhou3 小时前
mysql shell8.4.10+mysql 8.4.10搭建MySQL replicaset主从
数据库·mysql·ffmpeg·replicaset·mysql shell
袁震3 小时前
HarmonyOS 应用包体积优化与上架自检实战:从 76.2MB 到 3.6MB
java·华为·性能优化·harmonyos
zcmodeltech3 小时前
反应装置模型控制系统设计与实现:多设备协同联动方案
java·网络·数据库·stm32·嵌入式硬件·能源·制造
Elastic 中国社区官方博客4 小时前
从建议到修复的 4 个阶段:使用 Elastic Workflows 实现人在回路中的自动化
运维·数据库·人工智能·后端·elasticsearch·ai·自动化
码视野4 小时前
基于 Spring Boot + Vue3 的【城市地下燃气管网微泄漏感知与相邻地下空间燃爆预警中台】设计与实现(含PRD/三端高保真源码/大屏)
java·前端·人工智能·spring boot·后端
北京靠谱的GEO优化机构4 小时前
海外推广:没有媒体内容,SEO就是“无米之炊“
服务器·数据库·媒体
2601_962071574 小时前
数据库系统架构与DBMS功能探微:现代信息时代数据管理的关键
java·开发语言·数据库