版权声明:看什么?6,你和我,走一波! https://blog.csdn.net/qq_31323797/article/details/84941606
1 JDBC
1.1 导入依赖
<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>
1.2 配置数据库信息
spring.datasource.username=root
spring.datasource.password=123456
# ?serverTimezone=GMT%2B8 一定要指定
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/mall?serverTimezone=GMT%2B8
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
1.3 测试
package com.gp6.springboot23;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;
@RunWith(SpringRunner.class)
@SpringBootTest
public class Springboot23ApplicationTests {
@Autowired
DataSource dataSource;
@Test
public void contextLoads() throws SQLException {
// SpringBoot2.x默认数据源: class com.zaxxer.hikari.HikariDataSource
// SpringBoot1.x默认数据源: class org.apache.tomcat.jdbc.pool.DataSource
System.out.println("数据源" + dataSource.getClass());
Connection connection = dataSource.getConnection();
// 连接HikariProxyConnection@102577332 wrapping com.mysql.cj.jdbc.ConnectionImpl@588307f7
System.out.println("连接" + connection);
connection.close();
}
}
1.4 SpringBoot2.x默认使用HikariDataSource数据源
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
点击进入
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<version>2.1.1.RELEASE</version>
<scope>compile</scope>
</dependency>
<!-- 导入HikariDataSource,所以默认使用HikariDataSource -->
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
<version>3.2.0</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.1.3.RELEASE</version>
<scope>compile</scope>
</dependency>
</dependencies>
1.5 原理
- org.springframework.boot.autoconfigure.jdbc.DataSourceConfiguration
该类主要功能是根据各种配置向容器中添加各种不同类型的数据源
// 如果导入HikariDataSource
@ConditionalOnClass({HikariDataSource.class})
@ConditionalOnMissingBean({DataSource.class})
@ConditionalOnProperty(
name = {"spring.datasource.type"},
havingValue = "com.zaxxer.hikari.HikariDataSource",
matchIfMissing = true
)
static class Hikari {
Hikari() {
}
@Bean
@ConfigurationProperties(
prefix = "spring.datasource.hikari"
)
public HikariDataSource dataSource(DataSourceProperties properties) {
HikariDataSource dataSource = (HikariDataSource)DataSourceConfiguration.createDataSource(properties, HikariDataSource.class);
if (StringUtils.hasText(properties.getName())) {
dataSource.setPoolName(properties.getName());
}
return dataSource;
}
}
// 如果导入tomcat中的jdbc连接池
@ConditionalOnClass({org.apache.tomcat.jdbc.pool.DataSource.class})
@ConditionalOnMissingBean({DataSource.class})
// 配置的spring.datasource.type是tomcat的jdbc数据源
@ConditionalOnProperty(
name = {"spring.datasource.type"},
havingValue = "org.apache.tomcat.jdbc.pool.DataSource",
matchIfMissing = true
)
static class Tomcat {
Tomcat() {
}
@Bean
@ConfigurationProperties(
prefix = "spring.datasource.tomcat"
)
public org.apache.tomcat.jdbc.pool.DataSource dataSource(DataSourceProperties properties) {
org.apache.to mcat.jdbc.pool.DataSource dataSource = (org.apache.tomcat.jdbc.pool.DataSource)DataSourceConfiguration.createDataSource(properties, org.apache.tomcat.jdbc.pool.DataSource.class);
DatabaseDriver databaseDriver = DatabaseDriver.fromJdbcUrl(properties.determineUrl());
String validationQuery = databaseDriver.getValidationQuery();
if (validationQuery != null) {
dataSource.setTestOnBorrow(true);
dataSource.setValidationQuery(validationQuery);
}
return dataSource;
}
}
- 使用spring.datasource.type可以指定自定义的数据源类型
1.6 SpringBoot默认支持数据源
org.apache.tomcat.jdbc.pool.DataSource、HikariDataSource、BasicDataSource
2 自定义数据源类型
- org.springframework.boot.autoconfigure.jdbc.DataSourceConfiguration
@ConditionalOnMissingBean({DataSource.class})
// 如果指定的数据源类型不是默认数据源类型
@ConditionalOnProperty(
name = {"spring.datasource.type"}
)
static class Generic {
Generic() {
}
@Bean
public DataSource dataSource(DataSourceProperties properties) {
//使用DataSourceBuilder创建数据源,利用反射创建响应type的数据源,并且绑定相关属性
return properties.initializeDataSourceBuilder().build();
}
}
3 自动执行SQL
- org.springframework.boot.autoconfigure.jdbc.DataSourceInitializer
3.1 类作用:
runSchemaScripts(): 运行建表语句
runDataScripts(): 运行插入数据的sql语句
3.2 如何配置自动执行的sql
3.2.1 默认
3.2.1.1 将sql文件命名为schema.sql或者schema-all.sql
3.2.1.2 加入配置
spring.datasource.initialization-mode=always
3.2.2 自定义sql
spring.datasource.schema=classpath:/sql/m_cart.sql
4 测试数据源
package com.gp6.springboot23.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.List;
import java.util.Map;
@Controller
public class HelloController {
@Autowired
JdbcTemplate jdbcTemplate;
@ResponseBody
@GetMapping("/query")
public Map<String,Object> map(){
List<Map<String, Object>> list = jdbcTemplate.queryForList("select * FROM m_cart_sql");
return list.get(0);
}
}