一、什么是 JdbcTemplate
- JdbcTemplate是Spring提供的一套JDBC模板框架,利用AOP技术来解决直接使用JDBC时大量重复代码的问题。
- JdbcTemplate虽然没有MyBatis那么灵活,但是比直接使用JDBC要方便很多
二、安装配置
1、在 pom.xml 文件中添加如下依赖
- spring-boot-starter-jdbc:提供对 JDBC 数据库的支持
- mysql-connector-java:MySQL 数据库驱动
- hikari:SpringBoot 自带了 hikari 连接池,不用单独添加依赖。
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
2、在 application.properties 中配置数据库连接信息
# 数据库账号
spring.datasource.username=root
#数据库密码
spring.datasource.password=root
# 数据库连接
spring.datasource.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8
#数据源
spring.datasource.type=com.zaxxer.hikari.HikariDataSource
# 数据驱动
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
三、创建表及实体类
1、创建表结构如下
CREATE TABLE `book` (
`id` int NOT NULL PRIMARY KEY AUTO_INCREMENT,
`name` varchar(20) NULL ,
`author` varchar(20) NULL
);
2、实体类
public class Book {
private Integer id;
private String name;
private String author;
// 省略 getter 和 setter 方法
}
3、创建数据访问层
@Repository
public class BookDao {
@Resource
private JdbcTemplate jdbcTemplate;
//新增
public int add(Book book){
return jdbcTemplate.update("insert into `book`(`name`, `author`) values(?, ?)",
book.getName(), book.getAuthor());
}
// 更新
public int update(Book book){
return jdbcTemplate.update("update `book` set `name` = ?, `author` = ? where `id` = ? ",
book.getName(), book.getAuthor(), book.getId());
}
// 删除
public int deleteById(Integer id){
return jdbcTemplate.update("delete from `book` where `id` = ?", id);
}
// 查询所有
public List<Book> selectAll(){
return jdbcTemplate.query("select `id`, `name`, `author` from `book`",
new BeanPropertyRowMapper<>(Book.class));
}
// 根据ID查询一个
public Book selectById(Integer id){
return jdbcTemplate.queryForObject("select `id`, `name`, `author` from `book` where id = ? ",
new BeanPropertyRowMapper<>(Book.class), id);
}
}
(1)由于前面我们已经添加了 spring-jdbc 相关的依赖,JdbcTemplate 会被注册到 Spring 容器中,因此可以直接注入 JdbcTemplate 使用:
(2)在执行查询操作时,需要有一个 RowMapper 将查询出来的列和实体类中的属性一一对应起来:
增删改三种类型的操作主要使用 update 和 batchUpdate 方法来完成。
- query 和 queryForObject 方法中主要用来完成查询功能。
- execute 方法可以用来执行任意的 SQL、call 方法来调用存储过程。
- 如果列名和属性名都是相同的,那么可以直接使用 BeanPropertyRowMapper
- 如果列名和属性名不同,就需要开发者自己实现 RowMapper 接口,将列和实体类属性一一对应起来。
4、创建 Controller
为了方便就不创建 Service 层了,直接在 Controller 层进行访问,Controller 代码如下:
@RestController
public class BookController {
@Resource
private BookDao bookDao;
@PostMapping("/add")
public String save(@RequestBody Book book){
return bookDao.add(book) == 1? "保存成功": "保存失败";
}
@PutMapping("/update")
public String update(@RequestBody Book book){
return bookDao.update(book) == 1? "保存成功": "保存失败";
}
@DeleteMapping("/book/{id}")
public String update(@PathVariable("id") Integer id){
return bookDao.deleteById(id) == 1? "保存成功": "保存失败";
}
@GetMapping("/books")
public List<Book> queryAll(){
return bookDao.selectAll();
}
@GetMapping("/book/{id}")
public Book queryOne(@PathVariable("id") Integer id){
return bookDao.selectById(id);
}
}
5、运行测试
(1)、新增
(2)、更新
(3)、查询
(3)、删除