前言
在程序开发尤其是网页应用开发中,数据访问是必不可少的。通过前面的基本案例我们完成了一个简单的SpringBoot Web应用并对自动配置原理有了一定了解,本节在上述案例基础上,继续编写数据访问案例,将通过SpringBoot中数据访问案例,进一步了解SpringBoot中第三方starter和组件使用。
导入JDBC场景
前文已经介绍,SpringBoot为很多场景提供了starter:SpringBoot所有支持的场景和相关的starter,其中包括spring-boot-starter-data-jdbc。
这里确定要引入两个starter:spring-boot-starter-data-jdbc(连接数据库)、spring-boot-starter-test(测试类)。
思考如何编写datasource?
正常进行数据库连接,必须要编写datasource包括指定数据库驱动、链接地址、账号密码等等。我们查看starter-jdbc中是否有相关驱动的包,并没有找到:
其实也可以理解,官方在JDBC场景不导入驱动。因为不同的数据库,驱动包不同,这块应该是需要自行导入。那么在父项目依赖管理中,搜索需要的依赖包,看是否存在,找到mysql依赖,由此可以确定需要在项目中自行添加mysql(选择自己使用的数据库,作者这里用的mysql8.1.0)的依赖。
自动配置类DataSourceAutoConfiguration
引入后,应该如何配置dataSource?
前文已经分析过,官方的自动配置类都在org.springframework.boot.autoconfigure中,在jdbc下通过名称很容易可以找到DataSourceAutoConfiguration类
根据前文介绍,通过@EnableConfigurationProperties(DataSourceProperties.class)可以看出指定的datasoure相关的配置的关联类是DataSourceProperties
可以看到数据源配置常用的四个属性,由此可以知道如何编写application.xml。如数据库username:spring.datasource.username。
案例代码
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.3.4.RELEASE</version></parent><groupId>com.example</groupId><artifactId>boot-data-demo</artifactId><version>0.0.1-SNAPSHOT</version><name>boot-data-demo</name><description>boot-data-demo</description><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jdbc</artifactId></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency></dependencies>
</project>
application.yml
spring:datasource:url: jdbc:mysql://localhost:3306/db2024?serverTimezone=UTCusername: rootpassword: sunxiaodriver-class-name: com.mysql.cj.jdbc.Driver
测试类:
package com.example.bootdatademo;import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.jdbc.core.JdbcTemplate;@SpringBootTest
class BootDataDemoApplicationTests {@AutowiredJdbcTemplate jdbcTemplate;@Testvoid contextLoads() {Long aLong = jdbcTemplate.queryForObject("select count(*) from sys_user", Long.class);System.out.println("记录总数:"+aLong);}}
启动测试
成功: