JdbcTemplate是什么,JdbcTemplate简介(新手必看)
JDBC(Java Data Base Connectivity,Java 数据库连接)是 Java 语言中用来规范应用程序如何访问数据库的 API,为多种关系数据库提供统一访问方式,诸如查询和更新数据库中数据的方法。
JDBC 提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序。
JDBC 作为 Java 访问数据库的 API 规范,统一了各种数据库的访问方式,但是直接在 Java 程序中使用 JDBC 还是非常复杂和烦琐的,所以 Spring 对 JDBC 进行了更深层次的封装,而 JdbcTemplate 就是 Spring 提供的操作数据库的便捷工具。
JdbcTemplate 主要实现数据库连接的管理,我们可以借助它来执行所有数据库操作,例如查询、插入、更新、删除等操作,并且有效地避免了直接使用 JDBC 带来的烦琐编码。
Spring Boot 作为 Spring 的集大成者,自然会将 JdbcTemplate 集成进去。Spring Boot 针对 JDBC 的使用提供了对应的 Starter:spring-boot-starter-jdbc,它其实就是在 Spring JDBC 上做进一步的封装,方便在 Spring Boot 项目中更好地使用 JDBC。
JdbcTemplate的特点有以下几点:
总的来说,新增、删除与修改 3 种类型的操作主要使用 update() 和 batchUpdate() 方法来完成。query() 和 queryForObject() 方法主要用来完成查询功能。execute() 方法可以用来创建、修改、删除数据库表。call() 方法则用来调用存储过程。
在大部分情况下,我们都会使用更加强大的持久化框架来访问数据库,比如 MyBatis、Hibernate 或者 Spring Data JPA。之所以介绍 JdbcTemplate 这种基础的数据库框架,只是希望读者能从基础开始学习,只有掌握了这些基础的框架才能更好地学习其他复杂的 ORM 框架。
spring-boot-starter-jdbc 直接依赖于 HikariCP 和 spring-jdbc:
示例代码如下:
单击 Run Test 或在方法上右击,选择 Run 'querytest',运行测试方法,结果如下图所示:

图 1 单元测试的运行结果
单元测试 queryTest 运行成功,并输出了相应的结果。这说明 JdbcTemplate 已经连接上数据库,并成功执行了数据查询操作。
以上就把 JdbcTemplate 集成到 Spring Boot 项目中了。
JDBC 提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序。
JDBC 作为 Java 访问数据库的 API 规范,统一了各种数据库的访问方式,但是直接在 Java 程序中使用 JDBC 还是非常复杂和烦琐的,所以 Spring 对 JDBC 进行了更深层次的封装,而 JdbcTemplate 就是 Spring 提供的操作数据库的便捷工具。
JdbcTemplate 主要实现数据库连接的管理,我们可以借助它来执行所有数据库操作,例如查询、插入、更新、删除等操作,并且有效地避免了直接使用 JDBC 带来的烦琐编码。
Spring Boot 作为 Spring 的集大成者,自然会将 JdbcTemplate 集成进去。Spring Boot 针对 JDBC 的使用提供了对应的 Starter:spring-boot-starter-jdbc,它其实就是在 Spring JDBC 上做进一步的封装,方便在 Spring Boot 项目中更好地使用 JDBC。
JdbcTemplate的特点有以下几点:
- 速度快,相对于 ORM 框架,JDBC 的方式是最快的;
- 配置简单,Spring封装的除了数据库连接之外,几乎没有额外的配置;
- 使用方便,它更像DBUtils工具类,只需注入 JdbcTemplate 对象即可。
JdbcTemplate几种类型的方法
JdbcTemplate 虽然简单,但是功能非常强大,它提供了非常丰富、实用的方法,归纳起来主要有以下几种类型的方法:- execute() 方法:可以用于执行任何 SQL 语句,一般用于执行 DDL 语句;
- update()、batchUpdate()方法:用于执行新增、修改与删除等语句;
- query() 和 queryForXXX()方法:用于执行查询相关的语句;
- call() 方法:用于执行数据库存储过程和函数相关的语句。
总的来说,新增、删除与修改 3 种类型的操作主要使用 update() 和 batchUpdate() 方法来完成。query() 和 queryForObject() 方法主要用来完成查询功能。execute() 方法可以用来创建、修改、删除数据库表。call() 方法则用来调用存储过程。
在大部分情况下,我们都会使用更加强大的持久化框架来访问数据库,比如 MyBatis、Hibernate 或者 Spring Data JPA。之所以介绍 JdbcTemplate 这种基础的数据库框架,只是希望读者能从基础开始学习,只有掌握了这些基础的框架才能更好地学习其他复杂的 ORM 框架。
Spring Boot集成JdbcTemplate
Spring Boot 集成 JDBC 很简单,只需要引入依赖并进行基础配置即可。接下来以一个具体的例子来学习如何利用 Spring 的 JdbcTemplate 进行数据库操作。1) 添加依赖配置
在 pom.xml 配置文件中增加 JDBC 等相关依赖:<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency>在上面的示例中,在 pom.xml 文件中引入 spring-boot-starterjdbc 依赖。同时,由于项目中使用 MySQL 作为数据库,因此项目中需要引入 MySQL 驱动包。
spring-boot-starter-jdbc 直接依赖于 HikariCP 和 spring-jdbc:
- HikariCP 是 Spring Boot 2.0 默认使用的数据库连接池,也是传说中最快的数据库连接池;
- spring-jdbc 是 Spring 框架对 JDBC 的简单封装,提供了一个简化 JDBC 操作的开发工具包。
2) 创建数据库及表结构
首先创建 jdbctest 测试数据库,然后创建 student 表,包括 id、name、sex、age 等字段,对应的 SQL 脚本如下: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) 配置数据源
在 application.properties 中配置 MySQL 数据库连接相关内容。具体配置如下:spring.datasource.url=jdbc:mysql://localhost:3306/jdbctest?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true spring.datasource.username=root spring.datasource.password=root spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver在上面的示例中,数据库连接配置非常简单,包括数据库连接地址、用户名、密码以及数据驱动,无须其他额外配置。在 Spring Boot 2.0 中,com.mysql.jdbc.Driver 已经过期,推荐使用 com.mysql.cj.jdbc.Driver。
4) 使用JdbcTemplate
上面已经把 JdbcTemplate 集成到 Spring Boot 项目中,并创建了数据。接下来创建一个单元测试类 JdbcTests,验证 JdbcTemplate 操作数据库。示例代码如下:
@RunWith(SpringRunner.class) @SpringBootTest class JdbcTests { @Autowired JdbcTemplate jdbcTemplate; @Test 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()); } }上面是简单地使用 JdbcTemplate 的测试示例,Spring 的 JdbcTemplate 是自动配置的。使用 @Autowired 将 JdbcTemplate 注入需要的 Bean 中即可直接调用。
单击 Run Test 或在方法上右击,选择 Run 'querytest',运行测试方法,结果如下图所示:

图 1 单元测试的运行结果
单元测试 queryTest 运行成功,并输出了相应的结果。这说明 JdbcTemplate 已经连接上数据库,并成功执行了数据查询操作。
以上就把 JdbcTemplate 集成到 Spring Boot 项目中了。