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
url: jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8
driver-class-name: com.mysql.cj.jdbc.Driver
- 配置完之后,就可以直接使用了,因为Spring Boot已经默认进行了自动配置,去测试类测试一下
@SpringBootTest
class Springboot04DataApplicationTests {
@Autowired
DataSource dataSource;
@Test
void contextLoads() throws SQLException {
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;
@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";
}
}
|