Spring Boot 整合 JDBC
Github项目地址—-https://github.com/zhfushengx2048/springboot4.git
Spring Boot 整合持久层的具体操作
- JdbcTemplate
- MyBatis
- Spring Data JPA
- Spring Data Redis
- Spring Data MongoDB
JdbcTemplate 是 Spring 自带的 JDBC 模板组件,底层实现了对 JDBC 的封装,用法 与 MyBatis 类似,需要开发者自定义 SQL 语句。
JdbcTemplate 帮助我们完成数据库连接,SQL语句执行,以及结果集的封装。
但是它的不足之处是灵活性不如 MyBatis,因为 MyBatis 的 SQL 语句都是定义在 XML 文件中的,更有利于维护和拓展,而 JdbcTemplate 是以硬编码的方式将 SQL 语句直接写在 Java 代码例,不利于维护拓展
虽有不足,但整体来说非常方便,且为 Spring 自带组件
案例演示
-
1、创建 Maven 工程,pom.xml 中添加相关依赖。
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 1 <!-- 继承父包 -->
2 <parent>
3 <groupId>org.springframework.boot</groupId>
4 <artifactId>spring-boot-starter-parent</artifactId>
5 <version>2.2.4.RELEASE</version>
6 <relativePath/> <!-- lookup parent from repository -->
7 </parent>
8
9 <dependencies>
10
11 <!-- web启动jar -->
12 <dependency>
13 <groupId>org.springframework.boot</groupId>
14 <artifactId>spring-boot-starter-web</artifactId>
15 </dependency>
16
17 <dependency>
18 <groupId>org.springframework.boot</groupId>
19 <artifactId>spring-boot-starter-jdbc</artifactId>
20 </dependency>
21
22 <dependency>
23 <groupId>mysql</groupId>
24 <artifactId>mysql-connector-java</artifactId>
25 </dependency>
26
27 <dependency>
28 <groupId>org.projectlombok</groupId>
29 <artifactId>lombok</artifactId>
30 </dependency>
31
32
- 2、创建数据表
-
3、创建实体类 Student
1
2
3
4
5
6
7
8
9
10
11
12 1package xyz.fusheng.entity;
2
3import java.sql.Date;
4
5public class Student {
6 private Long id;
7 private String name;
8 private Double score;
9 private Date birthday;
10}
11
12
-
4、创建 StudentRepository
1
2
3
4
5
6
7
8
9
10
11
12
13
14 1package xyz.fusheng.repository;
2
3import xyz.fusheng.entity.Student;
4
5import java.util.List;
6
7public interface StudentRepository {
8 public List<Student> findAll();
9 public Student findById(Long id);
10 public int save(Student student);
11 public int deleteById(Long id);
12}
13
14
-
5、创建 StudentRepositoryImpl 接口实现类
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 1package xyz.fusheng.repository.impl;
2
3import org.springframework.beans.factory.annotation.Autowired;
4import org.springframework.jdbc.core.BeanPropertyRowMapper;
5import org.springframework.jdbc.core.JdbcTemplate;
6import xyz.fusheng.entity.Student;
7import xyz.fusheng.repository.StudentRepository;
8
9import java.util.List;
10
11//没有 @Repository 会导致 StudentHandler 无法自动注入 StudentRepository
12@Repository
13public class StudentRepositoryImpl implements StudentRepository {
14
15 //JdbcTemplate 由 Spring 内置创建 自动注入即可
16 @Autowired
17 private JdbcTemplate jdbcTemplate;
18
19 //该段代码表示将 SQL 语句查询到的结果封装成一个Student的实例化对象集合,很显然BeanPropertyRowMapper是RowMapper接口的一个实现类
20 @Override
21 public List<Student> findAll() {
22 return jdbcTemplate.query("select * from student",new BeanPropertyRowMapper<Student>(Student.class));
23 }
24
25 //条件查询结果,封装对象返回
26 @Override
27 public Student findById(Long id) {
28 return jdbcTemplate.queryForObject("select * from student where id = ?",new Object[]{id},new BeanPropertyRowMapper<Student>(Student.class));
29 }
30
31 //保存添加数据
32 @Override
33 public int save(Student student) {
34 return jdbcTemplate.update("insert into student(name,score,birthday) value (?,?,?)", student.getName(),student.getScore(),student.getBirthday());
35 }
36
37 //修改更新数据
38 @Override
39 public int update(Student student) {
40 return jdbcTemplate.update("update student set name = ?,score = ?,birthday = ? where id = ?", student.getName(),student.getScore(),student.getBirthday(),student.getId());
41 }
42
43 //删除数据对象
44 @Override
45 public int deleteById(Long id) {
46 return jdbcTemplate.update("delete from student where id = ?",id);
47 }
48}
49
50
-
6、创建 StudentHandler,并且注入 StudentRepository。
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 1package xyz.fusheng.controller;
2
3import org.springframework.beans.factory.annotation.Autowired;
4import org.springframework.web.bind.annotation.*;
5import xyz.fusheng.entity.Student;
6import xyz.fusheng.repository.StudentRepository;
7
8import java.util.List;
9
10@RestController
11@RequestMapping("/student")
12public class StudentHandler {
13
14 @Autowired
15 private StudentRepository studentRepository;
16
17 @GetMapping("/findAll")
18 public List<Student> findAll(){
19 return studentRepository.findAll();
20 }
21
22 @GetMapping("/findById/{id}")
23 public Student findById(@PathVariable("id") Long id){
24 return studentRepository.findById(id);
25 }
26
27 @PostMapping("/save")
28 public int save(@RequestBody Student student){
29 return studentRepository.save(student);
30 }
31
32 @PutMapping("/update")
33 public int update(@RequestBody Student student){
34 return studentRepository.update(student);
35 }
36
37 @DeleteMapping("/deleteById/{id}")
38 public int deleteById(@PathVariable("id") Long id){
39 return studentRepository.deleteById(id);
40 }
41}
42
43
-
7、创建配置文件 application.yml,添加数据源配置。
1
2
3
4
5
6
7
8 1spring:
2 datasource:
3 url: jdbc:mysql://localhost:3306/springboot4?useUnicode=true&charaterEncoding=UTF-8&serverTimezone=Hongkong
4 username: root
5 password: sa123
6 driver-class-name: com.mysql.cj.jdbc.Driver
7
8
PS : 此处存在时区问题,在 url 后面追加 serverTimezone=Hongkong 即可,这里我在Idea关联MySQL时在高级设置里用的是Shanghai,也就是serverTimezone=Hongkong,具体问题就不在这里说了。
-
8、创建启动类 Application
1
2
3
4
5
6
7
8
9
10
11
12
13 1package xyz.fusheng;
2
3import org.springframework.boot.SpringApplication;
4import org.springframework.boot.autoconfigure.SpringBootApplication;
5
6@SpringBootApplication
7public class Application {
8 public static void main(String[] args) {
9 SpringApplication.run(Application.class,args);
10 }
11}
12
13
- findAll
- findById
- save
PS : Postman 的操作,这里需要更改为 POST ,而且提交数据格式为 JSON
- update
- deleteById
Spring Boot 整合 JdbcTemplate,JdbcTemplate 底层实现了对 JDBC 的封装,是 Spring 自带的 JDBC 模板组件。JdbcTemplate 可以完成数据库连接、SQL 语句执行、结果集封装。