一、使用jdbc的方式进行数据访问
对于数据访问层,无论是SQL还是NOSQL springboot底层都是使用springdata的方式进行统一处理。
创建项目时 选中jdbc, mysql的依赖后期自己手动添加5.0版本
1. 在yml中配置信息:
spring:
datasource:
username: root
password: "0000"
url: jdbc:mysql://localhost:3306/libs
driver-class-name: com.mysql.jdbc.Driver
2. 写测试方法 ,【之前先自动注入一个 DataSource对象】
@RunWith(SpringRunner.class)
@SpringBootTest
class SpringBootDataApplicationTests {
@Autowired
DataSource dataSource;
@Test
void contextLoads() throws SQLException {
Connection connection = dataSource.getConnection();
Statement statement = connection.createStatement();
ResultSet set = statement.executeQuery("select * from books");
while (set.next()){
String bookName = set.getString("bookName");
System.out.println(bookName);
}
connection.close();
}
}
3. 注意:
- 创建springboot项目时,如果勾选了MySQL驱动的话,springboot的mysql驱动是8.0版本的,不兼容 所以不要勾,自己手动添加mysql依赖
在application.yaml 中配置数据库连接信息的时候,要把密码用 “” 括起来 不然报密码错误
二、整合Druid数据源
Druid是阿里巴巴开源平台上一个数据库连接池实现,结合了C3P0,DBCP等等数据库连接池的优点,同时加入了日志监控
- Druid可以很好的监控数据库连接池和sql的执行情况,天生就是针对监控而生的数据库连接池
- spring boot 2.0 以上默认使用 Hikari 数据源,可以说 Hikari与Druid都是当前javaweb上最优秀的数据源。
1. com.alibaba.druid.pool.DruidDataSource基本参数配置如下
三、Druid使用
1. 导入Druid依赖
<!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.4</version>
</dependency>
顺手导入log4j依赖
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
2. 在application配置参数
spring:
datasource:
password: "0000"
username: root
url: jdbc:mysql://localhost:3306/libs
driver-class-name: com.mysql.jdbc.Driver
# 配置德鲁伊数据库连接池
type: com.alibaba.druid.pool.DruidDataSource
#SpringBoot默认是不注入这些的,需要自己绑定
#druid数据源专有配置
initialSize: 5
minIdle: 5
maxActive: 20
maxWait: 60000
timeBetweenEvictionRunsMillis: 60000
minEvictableIdleTimeMillis: 300000
validationQuery: SELECT 1 FROM DUAL
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
poolPreparedStatements: true
#配置监控统计拦截的filters,stat:监控统计、log4j:日志记录、wall:防御sql注入
#如果允许报错,java.lang.ClassNotFoundException: org.apache.Log4j.Properity
#则导入log4j 依赖就行
filters: stat,wall,log4j
maxPoolPreparedStatementPerConnectionSize: 20
useGlobalDataSourceStat: true
connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500
3. 编写DruidConfig类
url地址栏输入 localhost:8080/druid 就会出现一个登录页面,账号密码是代码里的
/**
* @date: 2021/1/7 0:27
* @author: 易学习
* 此配置文件的作用是 把application.yaml里面专属配置给绑定起来
*/
@Configuration
public class DruidConfig {
/**
* 将数据源添加到容器中,并且绑定专属配置
* @return
*/
@ConfigurationProperties(prefix = "spring.datasource")
@Bean
public DataSource druidDataSource(){
return new DruidDataSource();
}
/**
* 后台监控 [死代码]
* @return
*/
@Bean
public ServletRegistrationBean a(){
ServletRegistrationBean<StatViewServlet> bean =
new ServletRegistrationBean<>(new StatViewServlet(), "/druid/*");
// 配置后台登录的账号密码
Map<String, String> initParameters = new HashMap<>(16);
// 增加配置 key是固定的 loginUsername loginPassword
initParameters.put("loginUsername", "admin");
initParameters.put("loginPassword", "123456");
// 允许谁可以访问, 如果 value 为"" 则表示所有人可以访问
initParameters.put("allow","");
// 设置初始化参数
bean.setInitParameters(initParameters);
return bean;
}
}
四、Druid spring boot starter 使用
1、添加官方的starter
<!-- druid starter -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.17</version>
</dependency>
<!--mysql starter-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
</dependency>
<!-- jdbc依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
2、分析自动配置
- 扩展配置项
**spring.datasource.druid **
DruidSpringAopConfiguration.``**class**
, 监控SpringBean的;配置项:**spring.datasource.druid.aop-patterns**
DruidStatViewServletConfiguration.``**class**
, 监控页的配置:**spring.datasource.druid.stat-view-servlet**
;默认开启DruidWebStatFilterConfiguration.``**class**
, web监控配置;**spring.datasource.druid.web-stat-filter**
;默认开启DruidFilterConfiguration.``**class**
}) 所有Druid自己filter的配置
3、配置模板
spring:
datasource:
username: root
password: "0000"
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/mybatis
druid:
filters: stat,wall # stat开启web监控,wall开启防火墙
stat-view-servlet:
enabled: true # 开启监控页 默认是false
login-username: zhangsan # 监控也登录用户名
login-password: "123123" #监控也登录密码
web-stat-filter:
enabled: true # 开启监控web应用
url-pattern: /* # 监控哪些
# 排除哪些 [有默认值]
exclusions: "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"
filter:
stat: # 开启web监控
enabled: true
slow-sql-millis: 1000 # 超过1000毫秒的查询都是慢查询
log-slow-sql: true # 记录到日志
wall: # 开启防火墙
enabled: true