关于 JDBC 肯定是 java 开发者的入门知识,很显然在 Spring boot 中的使用也是非常简单的,这一节先当与给大家复习了,已熟知的同学请忽略。

Tips:示例中 MySQL 使用5.7版本,spring boot 使用 2.4.2版本

加依赖

1
2
3
4
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>

请注意这里使用的包是spring-boot-starter-jdbc,其实在使用中你会发现会有这样一个包spring-boot-starter-data-jdbc,那么他们是什么区别呢?

区别在于,前者是 Spring支持JDBC数据库的包,使用DataSourceTransactionManager管理事务;后者是 Jpa 对JDBC的支持,使用JpaTransactionManager管理事务。至于 Jpa,后面会有相关的文章介绍。

写配置

1
2
3
4
5
6
7
8
9
10
server:
port: 8080
spring:
application:
name: spring-boot-jdbc
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/test
username: shure
password: shure

要想访问数据库,那肯定要配置数据库的连接信息了
注意:mysql8.0的驱动包有所变化 com.mysql.cj.jdbc.Driver

加注解

无需注解

编码

首先在mysql数据库中建立 user 的数据表。

1
2
3
4
5
6
7
8
9
DROP TABLE IF EXISTS `t_user`;
CREATE TABLE `t_user` (
`id` int(8) unsigned NOT NULL,
`name` varchar(100) COLLATE utf8mb4_general_ci NOT NULL,
`age` int NOT NULL,
`gender` varchar(8) COLLATE utf8mb4_general_ci NOT NULL,
`address` varchar(500) COLLATE utf8mb4_general_ci NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

然后,建立 user 表对应的实体类,并添加构造函数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@Data
public class UserEntity {
private Integer id;
private String name;
private int age;
private boolean gender;
private String address;
public UserEntity(){}
public UserEntity(String name, int age, boolean gender, String address){
this.name = name;
this.age = age;
this.gender = gender;
this.address = address;
}
}

再然后,编写访问数据库的操作。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
@Repository
public class UserJdbcDao {
@Autowired
private JdbcTemplate jdbcTemplate;
public List<UserEntity> findAll(String name){
List<UserEntity> list = jdbcTemplate.query("SELECT * FROM t_user WHERE name = ?", (res, i) -> {
UserEntity user = new UserEntity();
user.setId(res.getInt("ID"));
user.setName(res.getString("NAME"));
user.setAddress(res.getString("ADDRESS"));
user.setAge(res.getInt("AGE"));
user.setGender(res.getBoolean("GENDER"));
return user;
}, name);
return list;
}

public UserEntity getUser(Integer id){
List<UserEntity> list = jdbcTemplate.query("SELECT * FROM t_user WHERE id = ?", (res, i) -> {
UserEntity user = new UserEntity();
user.setId(res.getInt("ID"));
user.setName(res.getString("NAME"));
user.setAddress(res.getString("ADDRESS"));
user.setAge(res.getInt("AGE"));
user.setGender(res.getBoolean("GENDER"));
return user;
}, id);
return list.get(0);
}

public Integer save(UserEntity user){
return jdbcTemplate.update("INSERT INTO t_user(name, age, gender, address) VALUES(?, ?, ?, ?)",
user.getName(),
user.getAge(),
user.isGender(),
user.getAddress());
}

public void update(UserEntity user){
jdbcTemplate.update("UPDATE t_user SET name = ?, age = ?, gender = ?, address = ? WHERE id = ?",
user.getName(),
user.getAge(),
user.isGender(),
user.getAddress(),
user.getId());
}

public void delete(Integer id){
jdbcTemplate.update("DELETE FROM t_user WHERE id = ?", id);
}
}

最后,编写单元测试用例,创建对UserService的单元测试用例,通过创建、删除和查询来验证数据库操作的正确性。

这样 jdbc 的基本操作就完成了,通过上面这个简单的例子,我们可以看到在Spring Boot下访问数据库的配置依然秉承了框架的初衷:简单。我们只需要在pom.xml中加入数据库依赖,再到application.properties中配置连接信息,不需要像Spring应用中创建JdbcTemplate的Bean,就可以直接在自己的对象中注入使用。

参考与相关链接

示例代码:https://github.com/dddreams/learn-spring-boot/tree/master/spring-boot-jdbc

程序员DD的博文:https://blog.didispace.com/spring-boot-learning-21-3-1/

ddAnswer

更多文章请关注微信公众号: zhiheng博客

如果文章对你有用,转发分享、赞赏才是真爱 [斜眼笑]