第7章 JdbcTemplate 数据连接模板
7.1 JdbcTemplate 入门
7.2 使用 JdbcTemplate 操作数据库
7.3 实战:实现 JdbcTemplate 多数据源
7.1 JdbcTemplate 入门
7.1.1 JdbcTemplate 简介
1、JDBC
什么是JDBC?
JDBC(Java Database Connectivity,Java数据库连接)是 Java 语言中用来贵方应用程序如何访问数据库的API,为多种关系数据库提供统一访问方式,诸如查询和更新数据库中数据的方法。JDBC 提供了一种基准,据此可以构建更高级的工具和接口,是数据库开发人员能够编写数据库应用程序。
2、JdbcTemplate
(1)什么是 JdbcTemplate?
JDBC 作为 Java 访问数据库的 API 规范,统一了各种数据库的访问方式,但是直接在 Java 程序中使用 JDBC 还是非常复杂和繁琐的,所以 Spring 对 JDBC 进行了更深层次的封装,而 JdbcTemplate 就是 Spring 提供的操作数据库的便捷工具。它主要实现数据库连接的管理,我们可以借助 JdbcTemplate 来执行所有数据库操作,例如查询、插入、更新、删除等操作,并且有效地避免了直接使用 JDBC 带来的繁琐编码。
Spring Boot 针对 JDBC 的使用提供了对应的 Starter: spring-boot-starter-jdbc,它其实就是在 Spring JDBC 上进一步的封装,方便在 Spring Boot 项目职工更好地使用 JDBC。
(2)JdbcTemplate 的特点?
- 速度快:相对于 ORM 框架,JDBC 的方式是最快的。
- 配置简单:Spring 封装的除了数据库连接之外,几乎没有额外的配置。
- 使用方便:它更像 DBUtils 工具类,只需注入 JdbcTemplate 对象即可。
(3)JdbcTemplate 的几种类型的方法?
JdbcTemplate 虽然简单,但是功能非常强大,它提供了非常丰富、实用的方法,归纳起来主要有以下几种类型的方法:
- 1) execute() 方法:可以用于执行任何 SQL 语句,一般用于执行 DDL 语句。【建库 或 建表】
- 2) update()、batchUpdate() 方法:用于执行新增、修改与删除等语句。【增删改】
- 3) query() 和 queryForXXX() 方法:用于执行查询相关的语句。【查】
- 4) call() 方法:用于执行数据库存储过程和函数相关的语句。【存储过程 或 函数】
总的来说,
新增、修改和删除3种类型的操作主要使用 update() 和 batchUpdate() 方法来完成。
query() 和 queryForObject() 方法主要用来完成查询功能。
execute() 方法可以用来创建、修改、删除数据库表。
call() 方法则用来调用存储过程。
在大部分情况下,我们都会使用更加强大的持久化框架来访问数据库,比如 MyBatis、Hibernate 或者 Spring Data JPA。
之所以介绍 JdbcTemplate 这种基础的数据库框架,只是希望读者能从基础开始学习,只有掌握了这些基础的框架才能更好地学习其他复杂的 ORM 框架。
7.1.2 Spring Boot 集成 JdbcTemplate
1、创建数据库及表结构
(1)建库:创建数据库jdbctest
create database jdbctest;
(2)建表:创建数据表student
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`name` varchar(32) DEFAULT NULL COMMENT '姓名',
`sex` int DEFAULT NULL,
`age` int DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
(3)插入数据:向新建的student表中插入一条测试数据
INSERT INTO `jdbctest`.`student` (`id`, `name`, `sex`, `age`) VALUES ('1', '张三', '1', '10');
2、添加依赖配置
pom.xml
<!--Spring Boot 集成 JdbcTemplate-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<!--MySQL 驱动包-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
3、配置数据源
application.properties(位置:src/main/resources/application.properties)
# 配置数据源
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/jdbctest?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true
spring.datasource.username=root
spring.datasource.password=******
4、创建单元测试类
JdbcTests.java(位置:src/test/java/com/example/jdbctemplateproject/service/JdbcTests.java)
package com.example.jdbctemplateproject.service;
import org.junit.Assert;
import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.test.context.junit4.SpringRunner;
import java.sql.SQLException;
import java.util.List;
import java.util.Map;
/**
* 使用 JdbcTemplate
*
* @author: shipleyleo
* @create: 2023-02-25 16:57:50
*/
@RunWith(SpringRunner.class)
@SpringBootTest
class JdbcTests {
@Autowired
JdbcTemplate jdbcTemplate;
@Test
public void querytest() throws SQLException {
List<Map<String,Object>> list = jdbcTemplate.queryForList("select * from student ");
System.out.println(list.size());
Assert.assertNotNull(list);
Assert.assertEquals(1, list.size());
}
}
单击 Run Test 或 在方法上右击选择 Run ‘querytest’,执行单元测试,结果如图所示。
单元测试 querytest 运行成功,并输出了相应的结果。这说明 JdbcTemplate 已经连接上数据库,并成功执行了数据查询操作。
以上就把 JdbcTemplate 集成到 Spring Boot 项目中了。
附:如何执行单元测试?
(方式1)执行单元测试类:在类上右击选择 Run ‘JdbcTests’,如图所示。
(方式2)执行单元测试方法:在方法上右击选择 Run ‘querytest’,如图所示。
来源:《Spring Boot 从入门到实战》学习笔记