前文:
什么是 JDBCTemplate ?
JDBCTemplate 是 Spring 提供的一套 JDBC 模板框架,利用 AOP 技术来解决直接使用 JDBC 时的大量重复代码的问题。JDBC 虽然没有 Mybatis 那么灵活,但是比直接使用 JDBC 要方便很多。SpringBoot 中对 JDBCTemplate 的使用提供了自动化配置类 JdbcTemplateAutoConfiguration,源码如下:
@Configuration(
proxyBeanMethods = false
)
@ConditionalOnClass({DataSource.class, JdbcTemplate.class})
@ConditionalOnSingleCandidate(DataSource.class)
@AutoConfigureAfter({DataSourceAutoConfiguration.class})
@EnableConfigurationProperties({JdbcProperties.class})
@Import({JdbcTemplateConfiguration.class, NamedParameterJdbcTemplateConfiguration.class})
public class JdbcTemplateAutoConfiguration {
public JdbcTemplateAutoConfiguration() {
}
}
导入相关的依赖
<dependencies>
<!-- 导入 web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 导入 JDBCTemplate 模板 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<!-- 导入连接驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- 导入 druid 连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
创建数据库
创建数据库以及表比较简单,这里就不做描述了,有三个字段分别是 id、name、author
数据库配置
在 application.properties 文件中配置数据库基本的连接信息
spring:
# 数据库配置
datasource:
url: jdbc:mysql://localhost:3306/数据库名?useSSL=false&useLegacyDatetimeCode=false&serverTimezone=UTC
driver-class-name: com.mysql.cj.jdbc.Driver
username: 用户名
password: 密码
initial-size: 10
max-active: 20
max-idle: 8
min-idle: 8
创建实体类
package com.example.demo.entity;
public class Book {
private Integer id;
private String name;
private String author;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
@Override
public String toString() {
return "Book{" +
"id=" + id +
", name='" + name + '\'' +
", author='" + author + '\'' +
'}';
}
}
创建数据库访问层
代码如下:
package com.example.demo.dao;
import com.example.demo.entity.Book;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public class BookDao {
// 注入 jdbc 模板
@Autowired
private JdbcTemplate jdbcTemplate;
// 添加书信息
public int addBook(Book book) {
return jdbcTemplate.update("INSERT INTO book(name,author) VALUES (?,?)",book.getName(),book.getAuthor());
}
// 修改书信息
public int updateBook(Book book) {
return jdbcTemplate.update("UPDATE book SET name=?,author=? WHERE id = ?",book.getName(),book.getAuthor(),book.getId());
}
// 根据 id 删除书的信息
public int deleteBookById(Integer id) {
return jdbcTemplate.update("DELETE FROM book WHERE id = ?",id);
}
// 根据 id 获取书的信息
public Book getBookById(Integer id) {
return jdbcTemplate.queryForObject("SELECT * FROM book WHERE id = ?",new BeanPropertyRowMapper<>(Book.class),id);
}
// 查询所有书的信息
public List<Book> getAllBooks() {
return jdbcTemplate.query("SELECT * FROM book",new BeanPropertyRowMapper<>(Book.class));
}
}
创建业务层
先创建一个业务接口 BookService
package com.example.demo.service;
import com.example.demo.entity.Book;
import java.util.List;
public interface BookService {
// 添加书
int addBook(Book book);
// 修改书的信息
int updateBook(Book book);
// 删除书
int deleteBookById(Integer id);
// 根据 id 获取书
Book getBookById(Integer id);
// 查询所有书
List<Book> getAllBooks();
}
创建一个实现类实现该接口
package com.example.demo.service.impl;
import com.example.demo.dao.BookDao;
import com.example.demo.entity.Book;
import com.example.demo.service.BookService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class BookServiceImpl implements BookService {
@Autowired
private BookDao bookDao;
@Override
public int addBook(Book book) {
return bookDao.addBook(book);
}
@Override
public int updateBook(Book book) {
return bookDao.updateBook(book);
}
@Override
public int deleteBookById(Integer id) {
return bookDao.deleteBookById(id);
}
@Override
public Book getBookById(Integer id) {
return bookDao.getBookById(id);
}
@Override
public List<Book> getAllBooks() {
return bookDao.getAllBooks();
}
}
控制器编写
以上代码编写好之后就可以编写控制器了,代码如下:
package com.example.demo.controller;
import com.example.demo.entity.Book;
import com.example.demo.service.BookService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.List;
@Controller
public class BookController {
// 注入 BookService
@Autowired
private BookService bookService;
@GetMapping("/bookOps")
@ResponseBody
public void bookOps() {
// 添加书信息
Book book1 = new Book();
book1.setName("西厢记");
book1.setAuthor("王实甫");
int addBook = bookService.addBook(book1);
System.out.println("addBook --- " + addBook);
// 修改书信息
Book book2 = new Book();
book2.setId(1);
book2.setName("朝花夕拾");
book2.setAuthor("鲁迅");
int updateBook = bookService.updateBook(book2);
System.out.println("updateBook --- " + updateBook);
// 删除书信息
int deleteBookById = bookService.deleteBookById(4);
System.out.println("deleteBookById --- " + deleteBookById);
// 根据 id 获取书信息
Book getBookById = bookService.getBookById(1);
System.out.println("getBookById --- " + getBookById);
// 查询所以书信息
List<Book> getAllBooks = bookService.getAllBooks();
System.out.println("getAllBooks --- " + getAllBooks);
}
}
测试
我们运行一下项目,访问 http://localhost:8080/bookOps
然后查看数据库信息是否一致
OK,以上就是 SpringBoot 整合 JdbcTemplate 的例子