【Java Web】-> Spring 5 -> JdbcTemplate

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

Ⅰ 准备工作

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 中写一个向数据库添加数据的方法。
在这里插入图片描述
添加的方法通过调用 BookDaoadd() 方法完成,那么相应的我们需要在 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 我就大概介绍完了。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值