14. Spring Boot 整合JDBC
14.1 Spring Data
对于数据访问层,无论是 SQL(关系型数据库) 还是 NOSQL(非关系型数据库),Spring Boot 底层都是采用 Spring Data 的方式进行统一处理。
14.2 整合JDBC
-
创建一个新项目,引入基础模块
-
application.yml
spring: datasource: username: root password: 123456 # url中加上serverTimezone=UTC解决时区报错 url: jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=utf8&&serverTimezone=GMT%2B8 driver-class-name: com.mysql.cj.jdbc.Driver
-
测试
@SpringBootTest class Springboot04DataApplicationTests { @Autowired DataSource dataSource; @Test void contextLoads() throws Exception{ System.out.println(dataSource.getClass()); // 获得数据库连接 Connection connection = dataSource.getConnection(); System.out.println(connection); connection.close(); } }
14.3 JDBCTemplate
- 有了数据源(com.zaxxer.hikari.HikariDataSource),拿到数据库连接(java.sql.Connection),就可以使用原生的 JDBC 语句来操作数据库
- Spring 本身对原生的JDBC 做了轻量级的封装,就是JDBCTemplate
- 数据库操作的所有 CRUD 方法都在JDBCTemplate 中
- Spring Boot 不仅提供了默认的数据源,同时默认已经配置好了 JdbcTemplate 放在了容器中
- JdbcTemplate 的自动配置是依赖 org.springframework.boot.autoconfigure.jdbc 包下的 JdbcTemplateConfiguration 类
主要有以下方法
- execute方法:可以用于执行任何SQL语句,一般用于执行DDL语句;
- update方法及batchUpdate方法:update方法用于执行新增、修改、删除等语句;batchUpdate方法用于执行批处理相关语句;
- query方法及queryForXXX方法:用于执行查询相关语句;
- call方法:用于执行存储过程、函数相关语句。
测试
@RestController
public class JDBCController {
@Autowired
JdbcTemplate jdbcTemplate;
@GetMapping("/userList")
public List<Map<String, Object>> userList() {
String sql = "select * from user";
List<Map<String, Object>> maps = jdbcTemplate.queryForList(sql);
return maps;
}
@GetMapping("/addUser")
public String addUser() {
String sql = "insert into mybatis.user(id,name,pwd) values (8,'dns','123456')";
jdbcTemplate.update(sql);
return "add_ok";
}
@GetMapping("/updateUser/{id}")
public String updateUser(@PathVariable("id") int id) {
String sql = "update mybatis.user set name = ?,pwd=? where id=" + id;
Object[] objects = {"www", "123"};
jdbcTemplate.update(sql,objects);
return "update_ok";
}
@GetMapping("/deleteUser/{id}")
public String deleteUser(@PathVariable("id") int id) {
String sql = "delete from mybatis.user where id =?";
jdbcTemplate.update(sql,id);
return "delete_ok";
}
}