JdbcTemplate
Ⅰ 准备工作
JdbcTemplate 属于 Spring 模块中我圈起来的那个模块。

Spring 框架对 JDBC 进行了封装,使用 JdbcTemplate 方便实现对数据库操作。
需要的 jar 包如下:

对应的 Maven pom文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.tyz</groupId>
<artifactId>SpringDemo4</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.9</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.aopalliance/com.springsource.org.aopalliance -->
<dependency>
<groupId>org.aopalliance</groupId>
<artifactId>com.springsource.org.aopalliance</artifactId>
<version>1.0.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.aspectj/aspectjweaver -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.6.8</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-aspects -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>5.2.0.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/junit/junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.2.9.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-orm -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>5.2.5.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-tx -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>5.2.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>5.2.8.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.8.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.2.8.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
<version>5.2.8.RELEASE</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
</dependencies>
</project>
我先创建一个数据库 book。

接着我们需要在配置文件中配置数据库连接池。

关于数据库连接池的配置,在我的 Spring IOC 引入外部属性文件 模块,有更详细的讲解,这里不再赘述。

下一步,我们需要配置 JdbcTemplate 对象,注入 DataSource。

我们点进 JdbcTemplate 的源码,可以看到一个单参的构造方法

现在我们就需要注入 DataSource。它其实就是我们上面配置的数据库连接池。

接着我们需要开启组件扫描。注意需要在配置文件中增加 context 命名空间。

为了更清楚一点,我将上面的配置直接贴上来。
<?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.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
我们现在写一个简单的 Service 层和 Dao 层。 我们需要在 Dao 层注入 JdbcTemplate 对象。
我们先在 Service 中加一个 Service 注解。

然后在 Dao 的实现类上也加一个创建对象的注解。

在 BookService 中注入 BookDao。

然后在 BookDaoImpl 中注入 JdbcTemplate。

这里的注入将会把我们在配置文件中创建的 JdbcTemplate 对象注入进来。

Ⅱ JdbcTemplate 操作数据库
A. 增 & 删 & 改
首先我先在我的数据库中建立一张表 user_infor。

对应的,我们来建立一个实体类并完成它们的 Setter 方法。

现在我们在 BookService 中写一个向数据库添加数据的方法。

添加的方法通过调用 BookDao 的 add() 方法完成,那么相应的我们需要在 BookDao 中添加 add() 方法并在实现类 BookDaoImpl 中实现。


在实现类中,我们就要调用 jdbcTemplate 来向数据库添加数据了。

要实现数据的插入,需要使用 update() 方法,第一个是插入的 SQL 语句,第二个是可变参,是要SQL 中要插入的数据。

然后我们写一个测试来验证一下。

显示测试通过了,我们再来看一下数据库。

确实已经写入了。
这里如果大家遇到数据库的连接错误:
com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Client does not support authentication protocol requested by server; consider upgrading MySQL client
可以参考下面这篇文章修改👇
接着我们再来看删除、修改操作,它们和增加的方法是很类似的。
首先还是在 BookService 中增加相应的删除和更新方法,通过调用 BookDao 的方法来完成。

接着,在 BookDao 中增加这两个方法并在实现类中实现。


我们做一下测试。

可以看到都成功了。
B. 查询
a. 查询返回某个值
比如我们现在要查询表中的记录数,还是先在 BookService 中增加一个查询方法。

最后我们在 BookDaoImpl 中实现它,我们需要调用的是queryForObject 方法,它有两个参数,第一个还是 SQL 语句,第二是返回值的类型。


测试结果如下:


b. 查询返回对象
比如我们要查询一本书的详细信息,这时要返回的就是一个对象。

在实现类中我们要调用 jdbcTemplate 的是下面这个方法。

其中第一个参数还是 sql 语句;
第二个参数是一个接口,作用是返回不同类型的数据,使用这个接口的实现类完成数据的封装。我们可以自己实现这个接口但是没有必要,Spring里已经有实现类封装得很好了;
第三个参数是传递给 sql 语句中的问号的值。
具体的用法如下,我们需要在第二个参数 new 一个 BeanPropertyRowMapper 类,在泛型的括号中写需要返回的数据类型,在圆括号中写这个类型的 class。

注意这里的查询对象,最终是调用实体类 Book 中的 set 方法进行属性注入的,所以实体类的属性名需要和数据库中的字段名相匹配。

c. 查询返回集合
比如我们要查询图书列表分页。

在实现类中我们调用的是 query 方法


可以看到测试成功了。

C. JdbcTemplate 批量操作
在前面的操作中,我们不管是修改也好添加也好,都是对一条记录在做操作,现在我们再来看一下如何同时对多条记录进行操作。
a. 批量添加

实现批量操作非常简单,我们只需要写一条添加的语句,然后调用已经封装好的方法 batchUpdate。

最后我们再输出一行影响的行数。

然后我们做一下测试。

可以看到测试成功,并且数据全都正常插入了。

b. 批量修改
批量修改只需要修改 SQL 语句即可。

测试结果如下

c. 批量删除

测试结果如下:

关于 Spring 中的 JdbcTemplate 我就大概介绍完了。
本文介绍了Spring中JdbcTemplate的使用,包括准备工作的数据库连接池配置、JdbcTemplate对象注入,以及增删改查和批量操作的实现。通过示例展示了添加、删除、更新和查询单个值、对象和集合的方法,并提供了测试验证。此外,还涵盖了批量添加、修改和删除的操作。
572

被折叠的 条评论
为什么被折叠?



