Spring Boot(十)--------整合JDBC
19、整合JDBC
19.1 SpringData简介
-
对于数据访问层,无论是 SQL(关系型数据库) 还是 NOSQL(非关系型数据库),Spring Boot 底层都是采用 Spring Data 的方式进行统一处理
-
Spring Boot 底层都是采用 Spring Data 的方式进行统一处理各种数据库,Spring Data 也是 Spring 中与 Spring Boot、Spring Cloud 等齐名的知名项目。
-
Sping Data 官网:Spring Data
-
数据库相关的启动器 :可以参考官方文档:Spring Boot Reference Documentation
19.2 整合JDBC
19.2.1 创建测试项目测试数据源
- 新建测试项目
springboot-04-data
,导入相应基础模块(Web和SQL)
- 项目自动帮我们导入了一些启动器
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
- 编写
yaml
配置文件链接数据库,使用mybatis
数据库
spring:
datasource:
username: root
password: 123456
#?serverTimezone=UTC解决时区的报错,也可以去MySQL安装路径 my.ini 下修改配置,一劳永逸
url: jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8
# mysql8以上加.cj
driver-class-name: com.mysql.cj.jdbc.Driver
- 链接数据库
- 配置完之后,就可以直接使用了,因为Spring Boot已经默认进行了自动配置,去测试类测试一下
@SpringBootTest
class Springboot04DataApplicationTests {
//把yaml配置的数据库注册过来
@Autowired
DataSource dataSource;
@Test
void contextLoads() throws SQLException {
//查看默认数据源 :class com.zaxxer.hikari.HikariDataSource
System.out.println(dataSource.getClass());
//获得数据库链接
Connection connection = dataSource.getConnection();
System.out.println(connection);
//关闭链接
connection.close();
}
}
-
默认配置的数据源为:
class com.zaxxer.hikari.HikariDataSource
-
数据源所有自动配置都在
DataSourceAutoConfiguration
文件,其中导入了DataSourceProperties
文件 -
Spring Boot 2.2.5 默认使用HikariDataSource 数据源,而以前版本,如 Spring Boot 1.5 默认使用 org.apache.tomcat.jdbc.pool.DataSource 作为数据源
-
可以使用 spring.datasource.type 指定自定义的数据源类型,值为 要使用的连接池实现的完全限定名。
19.3 JDBCTemplate
-
xxxxTemplates
:Spring Boot已经配置好的模板bean,拿来即用 -
有了数据源(com.zaxxer.hikari.HikariDataSource),然后可以拿到数据库连接(java.sql.Connection),有了连接,就可以使用原生的 JDBC 语句来操作数据库;
-
即使不使用第三方第数据库操作框架,如 MyBatis等,Spring 本身也对原生的
JDBC
做了轻量级的封装,即JdbcTemplate
-
数据库操作的所有CRUD方法都在
JdbcTemplate
中 -
Spring Boot 不仅提供了默认的数据源,同时默认已经配置好了
JdbcTemplate
放在了容器中,程序员只需自己注入即可使用 -
JdbcTemplate
的自动配置是依赖org.springframework.boot.autoconfigure.jdbc 包下的 JdbcTemplateConfiguration
类
19.3.1 JDBC Template主要提供以下几类方法
execute()
方法:可以用于执行任何SQL语句,一般用于执行DDL语句update()
方法及batchUpdate()
方法:update()
方法用于执行新增、修改、删除等语句;batchUpdate()
方法用于执行批处理相关语句query()
方法及queryForXXX()
方法:用于执行查询相关语句call()
方法:用于执行存储过程、函数相关语句
19.4 测试
- 新建一个
JDBCController
,注入jdbcTemplate
,尝试使用原生JDBC对数据进行操作
@RestController
public class JDBCController {
@Autowired
JdbcTemplate jdbcTemplate;
//查询数据库的所有信息
//没有实体类的情况下,如何获取数据库中的东西? 万能的MAP
//注意:此处我用IDEA连接了数据库,所以表名要写mybatis.user而不是user
@GetMapping("/userList")
public List<Map<String,Object>> userList(){
String sql = "select * from mybatis.user";
List<Map<String,Object>> list_maps = jdbcTemplate.queryForList(sql);
return list_maps;
}
//增加数据
@GetMapping("/addUser")
public String addUser() {
String sql = "insert into mybatis.user(id,name,pwd) values(10,'小明','123456')";
jdbcTemplate.update(sql);
return "update-ok";
}
//修改数据
@GetMapping("/updateUser/{id}")
public String updateUser(@PathVariable("id") int id) {
String sql = "update mybatis.user set name = ?,pwd = ? where id = " + id;
//封装
Object[] objects = new Object[2];
objects[0] = "小李";
objects[1] = "mmmmmm";
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 "update-ok";
}
}
- 测试成功