Spring Boot 整合 JDBC

释放双眼,带上耳机,听听看~!

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、创建数据表

Spring Boot 整合 JDBC

  • 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

Spring Boot 整合 JDBC

  • findById

Spring Boot 整合 JDBC

  • save

Spring Boot 整合 JDBC
Spring Boot 整合 JDBC
PS : Postman 的操作,这里需要更改为 POST ,而且提交数据格式为 JSON

  • update

Spring Boot 整合 JDBC
Spring Boot 整合 JDBC

  • deleteById

Spring Boot 整合 JDBC
Spring Boot 整合 JDBC
Spring Boot 整合 JdbcTemplate,JdbcTemplate 底层实现了对 JDBC 的封装,是 Spring 自带的 JDBC 模板组件。JdbcTemplate 可以完成数据库连接、SQL 语句执行、结果集封装。

给TA打赏
共{{data.count}}人
人已打赏
安全技术

C/C++内存泄漏及检测

2022-1-11 12:36:11

气候事件

“梅花”擦过浙北“扭头”北上

2011-8-7 9:26:33

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索