本章节将介绍 Spring Boot 怎样集成 JDBC。这里的 JDBC 指的是 JdbcTemplate。
JdbcTemplate 是 Spring 对数据库的操作在 jdbc 上面做了深层次的封装。使用 Spring 的注入功能,可以把 DataSource 注册到 JdbcTemplate 之中。
JdbcTemplate 其全限定命名为 org.springframework.jdbc.core.JdbcTemplate。
JdbcTemplate 主要提供以下五类方法:
execute:用于执行任何 SQL 语句,一般用于执行 DDL 语句;
update:用于执行新增、修改、删除等语句;
batchUpdate:用于执行批处理相关语句;
query 和 queryForXXX:用于执行查询相关语句;
call:用于执行存储过程、函数相关语句;
<!-- JDBC依赖(JDBCTemplate) --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <!-- MySQL JDBC Driver --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.46</version> </dependency>
本教程将采用 MySQL 作为测试数据库,在 MySQL 中创建 test 数据库,然后创建一个 user 表。表结构 SQL 语句如下:
CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) DEFAULT NULL, `sex` varchar(255) DEFAULT NULL, `age` int(11) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- 插入测试数据 INSERT INTO `user` (`id`, `name`, `sex`, `age`) VALUES (1, '张三', '男', 27); INSERT INTO `user` (`id`, `name`, `sex`, `age`) VALUES (2, '李思', '女', 25); INSERT INTO `user` (`id`, `name`, `sex`, `age`) VALUES (3, '赵六', '男', 28);
1)添加数据库配置信息,如:数据库URL、driverclass、用户名、密码等。如下:
# datasource spring.datasource.driverClassName=com.mysql.jdbc.Driver spring.datasource.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8 spring.datasource.username=root spring.datasource.password=aaaaaa
(2)定义 user 表对应的实体 UserEntity,代码如下:
public class UserEntity { private long id; private String name; private int age; private String sex; // 忽略 getter 和 setter }
(3)编写 service 类,在该类中注入 JdbcTemplate,然后使用 JdbcTemplate 实现数据库查询。代码如下:
import com.hxstrive.springboot.jdbc.demo.entity.UserEntity; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.RowMapper; import org.springframework.stereotype.Service; import java.sql.ResultSet; import java.sql.SQLException; import java.util.List; @Service public class UserService { // 注入 JdbcTemplate 实例 @Autowired private JdbcTemplate jdbcTemplate; // 查询所有用户信息 public List<UserEntity> findAll() { final String sql = "SELECT `id`, `name`, `age`, `sex` FROM user"; return jdbcTemplate.query(sql, new RowMapper<UserEntity>() { // 自定义的行处理器 @Override public UserEntity mapRow(ResultSet resultSet, int i) throws SQLException { UserEntity userDomain = new UserEntity(); userDomain.setId(resultSet.getInt("id")); userDomain.setName(resultSet.getString("name")); userDomain.setAge(resultSet.getInt("age")); userDomain.setSex(resultSet.getString("sex")); return userDomain; } }); } }
(4)客户端代码,使用 @SpringBootTest 和 @Test 注解实现 Spring Boot 单元测试,测试自定义服务。代码如下:
import com.hxstrive.springboot.jdbc.demo.entity.UserEntity; import com.hxstrive.springboot.jdbc.demo.service.UserService; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import java.util.List; @SpringBootTest class DemoApplicationTests { @Autowired private UserService userService; @Test void contextLoads() { List<UserEntity> userEntities = userService.findAll(); for(UserEntity userEntity : userEntities) { System.out.println(userEntity); } } }
到这里,Spring Boot 集成 JDBC 就完成了。