关于 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: 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博客
如果文章对你有用,转发分享、赞赏才是真爱 [斜眼笑]