回顾一下JDBC有关概念
- 理解 数据源、连接、会话(DataSource、Connection、 SqlSession)
- 什么是数据库连接池(Apache commons-dbcp、c3p0、Druid、HikariCP)
- 为什么要使用数据库连接池
小结
| 名称 | 含义 |
|---|---|
| (DataSource)数据源 | 是数据的地址及一些额外的配置属性,使用这些数据,可以建立与数据库的链接 |
| Connection | 连接数据源的物理链路(可以理解为数据库对象,java一切皆对象) |
| SqlSession | 连接数据源的逻辑链路(一般指mybatis中的session),可以对应多个Connection,根据调度策略,选取其中一个Connection |
数据库连接池:就是一堆Connection集合,不同的对象使用不同的Connection;因为Connection的创建比较耗资源和浪费时间,就一次性多创一点,麻烦事一次搞定。
SpringBoot 使用JDBC
- 数据源,在application.yaml中配置
spring:
datasource:
username: root
password: 123456
url: jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=utf8&useSSL=true&serverTimezone=Asia/Shanghai
driver-class-name: com.mysql.cj.jdbc.Driver
username和password要对,idea的提示不靠谱
- 直接使用JdbcTemplate,关于JDBC连接的操作都已经做好了,一直到返回结果集以及释放资源,
- 样例
@Controller
public class JDBCController {
@Autowired
JdbcTemplate template;
@GetMapping("/u")
@ResponseBody
public List<Map<String, Object>> getlist(){
String sql="select * from mybatis.blog";
return template.queryForList(sql);
}
}
exp
- SpringBoot源码阅读中
以xxxxTemplate类的格式命名的就表示该类已经被Spring托管,以被注册为bean(@Bean)
Druid的使用
- 导入maven依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.5</version>
</dependency>
- 编写application.yaml
spring:
datasource:
username: root
password: 123456
url: jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=utf8&useSSL=true&serverTimezone=Asia/Shanghai
driver-class-name: com.mysql.cj.jdbc.Driver
#SpringBoot默认是不注入这些的,需要自己绑定
#druid数据源专有配置
type: com.alibaba.druid.pool.DruidDataSource
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
- 编写配置类(基本是固定写法)
@Configuration
public class DruidConfig {
@Bean
@ConfigurationProperties("spring.datasource")
public DataSource druidDataSource(){
return new DruidDataSource();
}
//后台监控
@Bean
public ServletRegistrationBean servletRegistrationBean(){
ServletRegistrationBean<StatViewServlet> bean = new ServletRegistrationBean<>(new StatViewServlet(), "/druid/*");
//后台登录密码
Map<String, String> initParameter = new HashMap<>();//设置参数
initParameter.put("loginUsername","admin");
initParameter.put("loginPassword","123456");
initParameter.put("allow","");
//都是固定配置
bean.setInitParameters(initParameter);
return bean;
}
@Bean
public FilterRegistrationBean filter(){
FilterRegistrationBean bean = new FilterRegistrationBean();
bean.setFilter(new WebStatFilter());
Map<String, String> initParameters = new HashMap<>();
//这些东西不进统计
initParameters.put("exclusions" ,"*.js,*.css,/druid/*");
bean.setInitParameters(initParameters);
return bean;
}
}