目录
第八章 SQL
8.1 数据源的自动配置-HikariDataSource
8.1.1 导入JDBC场景
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jdbc</artifactId>
</dependency>
导入场景后,发现官方没有导入数据库驱动,因为官方不知道接下来我们需要操作哪种数据库。数据库驱动需要自己手动导入。
导入MySQL驱动后,官方会自动仲裁版本。但是要注意数据库版本和驱动版本要对应。
<mysql.version>8.0.28</mysql.version> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency>
想要修改版本的方法:
1.直接依赖引入具体版本(maven的就近依赖原则)
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.49</version> </dependency>
2.重新声明版本(maven的属性的就近优先原则)
<properties> <java.version>1.8</java.version> <mysql.version>5.1.49</mysql.version> </properties>
8.1.2 分析自动配置
- DataSourceAutoConfiguration:数据源的自动配置
- 修改数据源相关的配置:spring.datasource
- 数据库连接池的配置,是自己容器中没有DataSource才自动配置的
- 底层配置好的连接池是:HikariDataSource
- DataSourceTransactionManagerAutoConfiguration:事务管理器的自动配置
- JdbcTemplateAutoConfiguration:JdbcTemplate的自动配置,可以来对数据库进行crud
- 可以修改这个配置项@ConfigurationProperties(prefix = "spring.jdbc") 来修改JdbcTemplate
- @Bean@Primary JdbcTemplate,容器中有这个组件
- JndiDataSourceAutoConfiguration:jndi的自动配置
- XADataSourceAutoConfiguration:分布式事务相关的
8.1.3 修改配置项
配置yaml文件:
spring:
datasource:
url: jdbc:mysql://localhost:3306/db_account
username: root
password: 123456
driver-class-name: com.mysql.jdbc.Driver
8.1.4 测试
@Slf4j
@SpringBootTest
class Boot05WebAdminApplicationTests {
@Autowired
JdbcTemplate jdbcTemplate;
@Test
void contextLoads() {
// jdbcTemplate.queryForObject("select * from account_tbl")
// jdbcTemplate.queryForList("select * from account_tbl",)
Long aLong = jdbcTemplate.queryForObject("select count(*) from account_tbl", Long.class);
log.info("记录总数:{}",aLong);
}
}
8.2 使用Druid数据源
8.2.1 druid官方github地址
整合第三方技术的两种方式:
1.自定义
2.找场景starter
8.2.2 自定义方式
8.2.2.1 创建数据源
<dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.17</version> </dependency>
<!--之前的做法-->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
destroy-method="close">
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
<property name="maxActive" value="20" />
<property name="initialSize" value="1" />
<property name="maxWait" value="60000" />
<property name="minIdle" value="1" />
<property name="timeBetweenEvictionRunsMillis" value="60000" />
<property name="minEvictableIdleTimeMillis" value="300000" />
<property name="testWhileIdle" value="true" />
<property name="testOnBorrow" value="false" />
<property name="testOnReturn" value="false" />
<property name="poolPreparedStatements" value="true" />
<property name="maxOpenPreparedStatements" value="20" />
现在定义一个配置类:
public class MyDataSourceConfig {
@ConfigurationProperties("spring.datasource")
@Bean
public DataSource dataSource(){
DruidDataSource druidDataSource = new DruidDataSource();
//所有的属性也可以从配置文件中获取
return druidDataSource;
}
}
8.2.2.2 StatViewServlet
Druid内置提供了一个StatViewServlet用于展示Druid的统计信息。