SpringBoot 与JDBC以及Druid的使用

203 阅读2分钟

回顾一下JDBC有关概念

小结

名称含义
(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的提示不靠谱

@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;
    }
}