一、使用jdbc的方式进行数据访问

对于数据访问层,无论是SQL还是NOSQL springboot底层都是使用springdata的方式进行统一处理。

创建项目时 选中jdbc, mysql的依赖后期自己手动添加5.0版本

1. 在yml中配置信息:

  1. spring:
  2. datasource:
  3. username: root
  4. password: "0000"
  5. url: jdbc:mysql://localhost:3306/libs
  6. 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基本参数配置如下

未命名图片.png

三、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;
    }

}

未命名图片.png

四、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