Springboot 2.x 整合 JDBC
一、创建项目
使用 Spring Initializr 快速创建项目,选中如下模块(当然也可以手动导入依赖)
等待 IDEA 下载相关组件,下载完成后打开 pom.xml ,具体的依赖如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</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-web</artifactId> </dependency> </dependencies> |
其实 Springboot 已经为我们仲裁好了数据库驱动的版本,我们可以找到该项目的父项目 spring-boot-starter-parent ,然后找到 spring-boot-starter-parent 的父项目 spring-boot-dependencies ,在这里定义了 Springboot 为我们仲裁好的数据库驱动版本
而我本地 mysql 的版本为 8.0.20 ,如何将 Springboot 默认的 8.0.22 改为 8.0.20 呢?
方式一、pom.xml 定义 mysql.version 的版本
1 2 3 4 5 | <properties> <java.version> 1.8 </java.version> // properties 中定义 mysql 的版本,覆盖 spring-boot-dependencies 中定义的 mysql.version <mysql.version> 8.0 . 20 </mysql.version> </properties> |
方式二、pom.xml 直接定义 mysql 的版本
1 2 3 4 5 6 7 | <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> // 显示指定数据库驱动的版本,覆盖 spring-boot-dependencies 中定义的版本 <version> 8.0 . 20 </version> <scope>runtime</scope> </dependency> |
二、Springboot JDBC 配置原理
Springboot 已经帮我们配置好了 JDBC,从我们引入的 starter 名称就可以看出来,官方整合的 starter 名称都是以 spring-boot-starter 开头的,而第三方的 starter 命名遵循的规则如下:
thirdpartyproject-spring-boot-starter
既然是官方配置好的,按照逻辑我们应该去 Springboot 的自动配置包中查看 Springboot 对 JDBC 是如何自动配置的
找到 jdbc 模块
我们这里就以数据源的配置为例
打开 DataSourceProperties
可以发现,我们可以通过在 application.properties 中配置 spring.datasource.xxx 来指定数据源的配置
接着还有数据库池话技术,默认引入了下面这些数据源
点开 DataSourceConfiguration 这个类,里面有 HikariDataSource 数据源
Springboot 默认的数据源就是 HikariDataSource ,因为我们引入 spring-boot-starter-jdbc 依赖的时候就默认引入了 HikariDataSource 的依赖,所以上面的判断条件成立,向 IOC 容器中
注入了 HikariDataSource
当然还有其它的数据源,例如 tomcat 数据源,从下面的代码飘红就可以看出没有生效,因为没有引入 tomcat 数据源的依赖,判断条件不成立,所以就不会向 IOC 容器中注入 tomcat 数据源
从上面可以看出,我们只要引入相应的数据源,然后就可以通过 spring.datasource.type 来改变数据源的类型
1 | spring.datasource.type=org.apache.tomcat.jdbc.pool.DataSource |
三、最佳实践
3.1、查看默认的数据源和操作默认配置的 JdbcTemplate
3.1.1、application.properties
1 2 3 4 5 6 7 8 9 10 | # 用户名 spring.datasource.username=root # 密码 spring.datasource.password=root # mysql 数据库 URL spring.datasource.url=jdbc:mysql: //localhost:3306/jdbcdemo?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC # mysql 驱动 (mysql 8 .x 版本的使用 com.mysql.cj.jdbc.Driver # 5 .x 版本的使用的是 com.mysql.jdbc.Driver # 使用 spring.datasource.driver- class -name 也是一样的,点击这个属性,会跳到同一个位置 spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver |
3.1.2、测试类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | @SpringBootTest class DatasourceApplicationTests { // 默认配置了 HikariDataSource 数据源 @Autowired DataSource dataSource; // 默认配置了 JdbcTemplate @Autowired JdbcTemplate jt; @Test void contextLoads() { System.out.println( "默认的数据源是: " + dataSource.getClass()); System.out.println( "默认配置了 JdbcTemplate: " + jt.getClass()); List<Map<String, Object>> maps = jt.queryForList( "select * from user" ); System.out.println(maps); } } |
3.1.3、测试结果
3.2、将默认的 HikariDataSource 数据源更换为 tomcat 数据源
3.2.1、指定数据源的类型
1 2 3 4 5 6 7 8 9 10 11 12 13 | # 用户名 spring.datasource.username=root # 密码 spring.datasource.password=root # mysql 数据库 URL spring.datasource.url=jdbc:mysql: //localhost:3306/jdbcdemo?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC # mysql 驱动 (mysql 8 .x 版本的使用 com.mysql.cj.jdbc.Driver # 5 .x 版本的使用的是 com.mysql.jdbc.Driver # 使用 spring.datasource.driver- class -name 也是一样的,点击这个属性,会跳到同一个位置 spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver # 指定使用的数据源类型为 tomcat 数据源 spring.datasource.type=org.apache.tomcat.jdbc.pool.DataSource |
3.2.2、排除 Springboot 默认的数据源 HikariCP (其实不排除也可以,因为已经通过 spring.datasource.type 指定了数据源的类型)
1 2 3 4 5 6 7 8 9 10 | <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> <exclusions> <exclusion> <groupId>com.zaxxer</groupId> <artifactId>HikariCP</artifactId> </exclusion> </exclusions> </dependency> |
3.2.3、引入 tomcat 数据源的依赖
1 2 3 4 5 | <dependency> <groupId>org.apache.tomcat</groupId> <artifactId>tomcat-jdbc</artifactId> <version> 9.0 . 33 </version> </dependency> |
3.2.4、测试类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | @SpringBootTest class DatasourceApplicationTests { // 更换为 tomcat 数据源 @Autowired DataSource dataSource; // 默认配置了 JdbcTemplate @Autowired JdbcTemplate jt; @Test void contextLoads() { System.out.println( "更换后数据源是: " + dataSource.getClass()); System.out.println( "默认配置了: " + jt.getClass()); List<Map<String, Object>> maps = jt.queryForList( "select * from user" ); System.out.println(maps); } } |
3.2.5、测试结果
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?