2024.5.13 Monday
目录
- 11.整合JDBC
- 11.1.SpringData简介
- 11.2.新建springboot-04-data项目
- 11.3.新建application.yaml
- 11.4.连接数据库
- 11.5.修改Springboot04DataApplicationTests.java
- 11.5.1.查看DataSourceProperties.java和DataSourceAutoConfiguration.java
- 11.6.JDBCTemplate
- 11.7.测试
- 11.7.1.新建JDBCController.java
- 11.7.2.运行springboot-04-data
- 11.7.3.修改JDBCController.java(增、删、改)
- 11.7.3.1.Add
- 11.7.3.2.Update
- 11.7.3.3.Delete
- 11.8.查看源码
- 11.8.1.DataSourceAutoConfiguration.java
- 11.8.2.ConditionalOnProperty.java
11.整合JDBC
11.1.SpringData简介
- 对于数据访问层,无论是 SQL(关系型数据库) 还是 NOSQL(非关系型数据库),Spring Boot 底层都是采用 Spring Data 的方式进行统一处理。
- Spring Boot 底层都是采用 Spring Data 的方式进行统一处理各种数据库,Spring Data 也是 Spring 中与 Spring Boot、Spring Cloud 等齐名的知名项目。
- Sping Data 官网:
https://spring.io/projects/spring-data - 数据库相关的启动器 :可以参考官方文档:
https://docs.spring.io/spring-boot/docs/2.2.5.RELEASE/reference/htmlsingle/#using-boot-starter
11.2.新建springboot-04-data项目
添加maven支持(在Project Structure->Modules点击加号添加对应项目),按照惯例修改settings中的maven,jdk和Java版本,Project Structure中的jdk和Java版本。修改pom中的springframework版本到2.7.13,重新加载Maven,删除多余文件。
配图版请见:新建springboot项目后需要配置的内容
11.3.新建application.yaml
根据个人已有数据库编辑代码:
spring:
datasource:
username: root
password: 123456
url: jdbc:mysql://localhost:3306/p37jdbc?useUnicode=true&characterEncoding=utf-8
driver-class-name: com.mysql.jdbc.Driver
11.4.连接数据库
选一个有参数的数据库表
11.5.修改Springboot04DataApplicationTests.java
package com.P31;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;
@SpringBootTest
class Springboot04DataApplicationTests {
@Autowired
DataSource dataSource;
@Test
void contextLoads() throws SQLException {
//查看默认的数据源(运行后可以在最后一行看到)是:com.zaxxer.hikari.HikariDataSource
System.out.println(dataSource.getClass());
//获取数据库连接
Connection connection = dataSource.getConnection();
System.out.println(connection);
//看到xxxxTemplate->这是SpringBoot已经配置好的模板bean,拿来即用
//关闭
connection.close();
}
}
以下这段红字提示的版本过时可以忽略,默认数据源是相比其他数据源运行更快的那一个:
在新版本里刷新可能出现以下错误:
此时需要修改application.yaml中的时区设置:
spring:
datasource:
username: root
password: 123456
#假如时区报错,就增加一个时区的配置,和其他配置用&连接,如:serverTimezone=UTC
url: jdbc:mysql://localhost:3306/p37jdbc?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8
driver-class-name: com.mysql.cj.jdbc.Driver
11.5.1.查看DataSourceProperties.java和DataSourceAutoConfiguration.java
这是数据库可以自动配置的原理
11.6.JDBCTemplate
- 有了数据源(com.zaxxer.hikari.HikariDataSource),然后可以拿到数据库连接(java.sql.Connection),有了连接,就可以使用原生的 JDBC 语句来操作数据库;
- 即使不使用第三方第数据库操作框架,如 MyBatis等,Spring 本身也对原生的JDBC 做了轻量级的封装,即JdbcTemplate。
- 数据库操作的所有 CRUD 方法都在 JdbcTemplate 中。
- Spring Boot 不仅提供了默认的数据源,同时默认已经配置好了 JdbcTemplate 放在了容器中,程序员只需自己注入即可使用
- JdbcTemplate 的自动配置是依赖 org.springframework.boot.autoconfigure.jdbc 包下的 JdbcTemplateConfiguration 类
JdbcTemplate主要提供以下几类方法:
- execute方法:可以用于执行任何SQL语句,一般用于执行DDL语句;
- update方法及batchUpdate方法:update方法用于执行新增、修改、删除等语句;batchUpdate方法用于执行批处理相关语句;
- query方法及queryForXXX方法:用于执行查询相关语句;
- call方法:用于执行存储过程、函数相关语句。
11.7.测试
新建controller文件夹
11.7.1.新建JDBCController.java
查询指定表中的所有数据
package com.P31.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import java.util.Map;
@RestController
public class JDBCController {
@Autowired
JdbcTemplate jdbcTemplate; //可以点开JdbcTemplate查看
//查询数据库的所有信息
//没有实体类,怎么获取数据库中的信息?->使用Map
@GetMapping("/userList")
public List<Map<String,Object>> userList(){
String sql = "SELECT * FROM users";
List<Map<String,Object>> list_maps = jdbcTemplate.queryForList(sql);
return list_maps;
}
}
11.7.2.运行springboot-04-data
记得选择
清空浏览器缓存,然后访问:http://localhost:8080/userList
和数据库中相同
11.7.3.修改JDBCController.java(增、删、改)
package com.P31.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import java.util.Map;
@RestController
public class JDBCController {
@Autowired
JdbcTemplate jdbcTemplate; //可以点开JdbcTemplate查看
//查询数据库的所有信息
//没有实体类,怎么获取数据库中的信息?->使用Map
@GetMapping("/userList")
public List<Map<String,Object>> userList(){
String sql = "SELECT * FROM users";
List<Map<String,Object>> list_maps = jdbcTemplate.queryForList(sql);
return list_maps;
}
//增加
@GetMapping("/addUser")
public String addUser(){
String sql = "INSERT INTO p37jdbc.users(id,NAME,PASSWORD,email,birthday) VALUES(6,'ZHAOSI','312321','111@outlook','2024-05-05')";
jdbcTemplate.update(sql);
return "completed add";
}
//更新
@GetMapping("/updateUser/{id}")
public String updateUser(@PathVariable("id") int id){
String sql = "UPDATE p37jdbc.users SET NAME=?,PASSWORD=? WHERE id="+id;
//封装
Object[] objects = new Object[2];
objects[0] = "ZHENGSAN";
objects[1] = "12121212";
jdbcTemplate.update(sql,objects);
return "completed update";
}
//删除
@GetMapping("/deleteUser/{id}")
public String deleteUser(@PathVariable("id") int id){
String sql = "DELETE FROM p37jdbc.users WHERE id=?";
jdbcTemplate.update(sql,id);
return "completed delete";
}
}
11.7.3.1.Add
http://localhost:8080/addUser
11.7.3.2.Update
http://localhost:8080/updateUser/5
11.7.3.3.Delete
http://localhost:8080/deleteUser/4
11.8.查看源码
11.8.1.DataSourceAutoConfiguration.java
数据源:
@Import({ DataSourceConfiguration.Hikari.class, DataSourceConfiguration.Tomcat.class,
DataSourceConfiguration.Dbcp2.class, DataSourceConfiguration.OracleUcp.class,
DataSourceConfiguration.Generic.class, DataSourceJmxConfiguration.class })
这些数据源会在pom.xml
中导入JDBC包后自动引用
如果想要自定义:修改type
11.8.2.ConditionalOnProperty.java
点击DataSourceAutoConfiguration.java
中的name
跳转到此文件(由于版本不同,理应跳转到DataSourceConfiguration.java
),可见其中提供了自定义的方式和自动注入的设置。