前言
Springboot 对于数据访问层, 不管是 SQL 还是 NOSQL,Spring Boot 底层都是采用 Spring Data 的方式统一处理. Spring Data 是 Spring 家族中与 Spring Boot,Spring Cloud 齐名且知名项目. 想要更好的了解 Sping Data, 可以参考 Sping Data 官网: https://spring.io/projects/spring-data
事实上, Springboot 整合 jdbc 基本上企业都不会这么去使用, 但是为什么要学呢? 我为什么又要写这么一篇文章呢? 也很简单, 就像 HelloWorld 程序一样的道理, 毕竟 jdbc 是连接数据库最基本的基础, 不忘基础, 重视基础, 不忘初心, 方得始终.
1, 创建 jdbc 工程环境
创建的时候勾选 web,jdbc,MySQL 即可,
pom.xml 文件默认会有如下依赖:
- <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>
如上搭建好之后, 应该怎么写才可以实现数据库的访问呢? 实际上 SpringBoot 中, 我们只需要简单的配置就可以实现数据库的连接了;
2, 编写配置文件
在 application.YAML 配置文件中, 编写 jdbc 常规配置连接
- spring:
- datasource:
- username: root
- url: jdbc:MySQL://localhost:3306/ufida
- password: 123456
- driver-class-name: com.MySQL.jdbc.Driver
在 springboot2.X 版本中如果
spring.datasource.url
不指定时区就会报一个 SQLException 错误
把上面的 URL 属性添加时区, 如下即可:
url: jdbc:MySQL://localhost:3306/ufida?serverTimezone=UTC
需要注意一点的是: 我现在使用的 MySQL 是 5.7 版本:
配置之后就可以直接去使用了, 因为 SpringBoot 已经默认帮我们进行了自动配置! 是不是感动到哭?
3,test 测试类测试
- @SpringBootTest
- class JdbcbootApplicationTests {
- // 第一步: DI 注入数据源
- @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
, 我们并没有手动配置, 到这里, 激起了各位的好奇心~ 不知道你们好不好奇, 反正宜春很好奇~, 于是乎全局搜索找到数据源的所有自动配置都在 :
DataSourceProperties
文件下, 不要问我为啥知道是在这个文件下, 给个图你也就和我一样知道了
接下来我们可以来探究下这里自动配置的原理以及能配置哪些属性了
可以看出 Spring Boot 2.2.2 默认使用
com.zaxxer.hikari.HikariDataSource
数据源, 而以前版本, 比如 Spring Boot 1.5 默认使用
org.apache.tomcat.jdbc.pool.DataSource
作为数据源; 至于原因也很简单, 听闻 HikariDataSource 是当前速度最快的数据源, 相比于传统的 C3P0 ,DBCP,Tomcat jdbc 等连接池更加牛皮, 因此 springboot 把它作为默认的数据源了.
既然是自动配置, 按照 springboot 的套路, 估计有个
DataSourceXXXAutoConfiguration
的东东, 全局搜索一下,
果不其然, 有存在一个
DataSourceAutoConfiguration
的类, 我们就来进去逛逛
无非这个类中就是一些数据源, 池什么的自动配置, 需要注意一点的就是
可以使用
spring.datasource.type
指定自定义的数据源类型, 值要使用连接池实现的完全限定名. 默认情况下, 它是从类路径自动检测的, 源码如下:
- @Configuration
- @ConditionalOnMissingBean({DataSource.class})
- @ConditionalOnProperty(
- name = {"spring.datasource.type"}
- )
- static class Generic {
- Generic() {
- }
- @Bean
- public DataSource dataSource(DataSourceProperties properties) {
- return properties.initializeDataSourceBuilder().build();
- }
- }
OK,DataSourceAutoConfiguration 的源码就看到这, 具体的可自行查看.
4,JdbcTemplate 自动配置原理
有了数据源 HikariDataSource 就可以拿到数据库连接 java.sql.Connection, 有了连接就相当于可以使用连接和原生的 JDBC 语句来操作数据库进行 crud, 这个点我估计都会想到 JdbcTemplate, 毕竟好东西都要合理利用!
这里不可以开挂使用第三方数据库操作框架 MyBatis, 实际上 Spring 本身也对原生的 JDBC 做了轻量级的封装, 没错就是 org.springframework.jdbc.core.JdbcTemplate.
既然是自动配置, 我们就应该想到 JdbcTemplate 的自动配置原理是依赖
org.springframework.boot.autoconfigure.jdbc
包下的 , 不出意料, 该包中果然有
JdbcTemplateAutoConfiguration
类. 如下
5,Springboot 集成 jdbc 之后 CRUD 测试
既然能使用 jdbcTemplate, 就使用它得了, 千万记得如下自动注入操作即可
- @Autowired
- JdbcTemplate jdbcTemplate;
至于 CRUD 代码这里就不再概述了, 本篇文章主要探究 Springboot 集成 jdbc 自动配置原理. 不管学什么框架都不是学会配置, 更重要的是思想!
如果本文对你有一点点帮助, 那么请点个赞呗, 谢谢~
最后, 若有不足或者不正之处, 欢迎指正批评, 感激不尽! 如果有疑问欢迎留言, 绝对第一时间回复!
欢迎各位关注我的公众号, 里面有一些 java 学习资料和一大波 java 电子书籍, 比如说周志明老师的深入 java 虚拟机, java 编程思想, 核心技术卷, 大话设计模式, java 并发编程实战..... 都是 java 的圣经, 不说了快上 Tomcat 车, 咋们走! 最主要的是一起探讨技术, 向往技术, 追求技术, 说好了来了就是盆友喔...
来源: https://www.cnblogs.com/yichunguo/p/12162769.html