springboot整合DRUID+mybatis

1、导包

<dependency>

            <groupId>mysql</groupId>

            <artifactId>mysql-connector-java</artifactId>

            <scope>runtime</scope>

        </dependency>


        <dependency>

            <groupId>org.apache.commons</groupId>

            <artifactId>commons-lang3</artifactId>

            <version>3.4</version>

        </dependency>


        <!-- 分页插件 -->

        <dependency>

            <groupId>com.github.pagehelper</groupId>

            <artifactId>pagehelper-spring-boot-starter</artifactId>

            <version>1.2.5</version>

        </dependency>

        <!-- alibabadruid数据库连接池 -->

        <dependency>

            <groupId>com.alibaba</groupId>

            <artifactId>druid-spring-boot-starter</artifactId>

            <version>1.1.9</version>

        </dependency>

        <dependency>

            <groupId>org.mybatis.spring.boot</groupId>

            <artifactId>mybatis-spring-boot-starter</artifactId>

            <version>1.2.1</version>

        </dependency>

2、编写配置文件

我这里用的是yml

# druid 配置:

spring:

  datasource:

      url: jdbc:mysql://192.168.1.101:3306/shrek?useUnicode=true&characterEncoding=utf-8&useSSL=false

      username: root

      password: root

      driver-class-name: com.mysql.jdbc.Driver

      platform: mysql

      type: com.alibaba.druid.pool.DruidDataSource

      # 下面为连接池的补充设置,应用到上面所有数据源中

      # 初始化大小,最小,最大

      initialSize: 1

      minIdle: 3

      maxActive: 20

      # 配置获取连接等待超时的时间

      maxWait: 60000

      # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒

      timeBetweenEvictionRunsMillis: 60000

      # 配置一个连接在池中最小生存的时间,单位是毫秒

      minEvictableIdleTimeMillis: 30000

      validationQuery: select 'x'

      testWhileIdle: true

      testOnBorrow: false

      testOnReturn: false

      # 打开PSCache,并且指定每个连接上PSCache的大小

      poolPreparedStatements: true

      maxPoolPreparedStatementPerConnectionSize: 20

      # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙

      filters: stat,wall,slf4j

      # 通过connectProperties属性来打开mergeSql功能;慢SQL记录

      connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000

      # 合并多个DruidDataSource的监控数据

      #useGlobalDataSourceStat: true

      

# mybatis 配置:

mybatis:

  mapper-locations: classpath:mapping/*.xml

  type-aliases-package: com.shrek.supervisor.entity


# 显示sql

logging:

  level:

    com:

      shrek:

        supervisor: 

          dao: debug

  

#pagehelper分页插件

pagehelper:

    helperDialect: mysql

    reasonable: true

    supportMethodsArguments: true

    params: count=countSql


3、利用mybatis-generator自动生成代码

这里不多讲直接跳过

4、配置mybaits注释

在启动类上加入

@MapperScan("com.shrek.supervisor.dao")

也可以直接在dao文件上直接加上@Mapper注释

新建一个config包用于存放配置类文件

DURID配置类:

@Configuration

public class DruidConfiguration {


    private static final Logger logger = LoggerFactory.getLogger(DruidConfiguration.class);


    private static final String DB_PREFIX = "spring.datasource";


    @Bean

    public ServletRegistrationBean druidServlet() {

        logger.info("init Druid Servlet Configuration ");

        ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new StatViewServlet(), "/druid/*");

        // IP白名单

        servletRegistrationBean.addInitParameter("allow", "192.168.1.101,127.0.0.1");

        // IP黑名单(共同存在时,deny优先于allow)

        servletRegistrationBean.addInitParameter("deny", "192.168.1.100");

        //控制台管理用户

        servletRegistrationBean.addInitParameter("loginUsername", "admin");

        servletRegistrationBean.addInitParameter("loginPassword", "admin");

        //是否能够重置数据 禁用HTML页面上的“Reset All”功能

        servletRegistrationBean.addInitParameter("resetEnable", "false");

        return servletRegistrationBean;

    }


    @Bean

    public FilterRegistrationBean filterRegistrationBean() {

        FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new WebStatFilter());

        filterRegistrationBean.addUrlPatterns("/*");

        filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");

        return filterRegistrationBean;

    }


    //解决 spring.datasource.filters=stat,wall,log4j 无法正常注册进去

    @ConfigurationProperties(prefix = DB_PREFIX)

    class IDataSourceProperties {

        private String url;

        private String username;

        private String password;

        private String driverClassName;

        private int initialSize;

        private int minIdle;

        private int maxActive;

        private int maxWait;

        private int timeBetweenEvictionRunsMillis;

        private int minEvictableIdleTimeMillis;

        private String validationQuery;

        private boolean testWhileIdle;

        private boolean testOnBorrow;

        private boolean testOnReturn;

        private boolean poolPreparedStatements;

        private int maxPoolPreparedStatementPerConnectionSize;

        private String filters;

        private String connectionProperties;


        @Bean     //声明其为Bean实例

        @Primary  //在同样的DataSource中,首先使用被标注的DataSource

        public DataSource dataSource() {

            DruidDataSource datasource = new DruidDataSource();

            datasource.setUrl(url);

            datasource.setUsername(username);

            datasource.setPassword(password);

            datasource.setDriverClassName(driverClassName);


            //configuration

            datasource.setInitialSize(initialSize);

            datasource.setMinIdle(minIdle);

            datasource.setMaxActive(maxActive);

            datasource.setMaxWait(maxWait);

            datasource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);

            datasource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);

            datasource.setValidationQuery(validationQuery);

            datasource.setTestWhileIdle(testWhileIdle);

            datasource.setTestOnBorrow(testOnBorrow);

            datasource.setTestOnReturn(testOnReturn);

            datasource.setPoolPreparedStatements(poolPreparedStatements);

            datasource.setMaxPoolPreparedStatementPerConnectionSize(maxPoolPreparedStatementPerConnectionSize);

            try {

                datasource.setFilters(filters);

            } catch (SQLException e) {

                System.err.println("druid configuration initialization filter: " + e);

            }

            datasource.setConnectionProperties(connectionProperties);

            return datasource;

        }


        public String getUrl() {

            return url;

        }


        public void setUrl(String url) {

            this.url = url;

        }


        public String getUsername() {

            return username;

        }


        public void setUsername(String username) {

            this.username = username;

        }


        public String getPassword() {

            return password;

        }


        public void setPassword(String password) {

            this.password = password;

        }


        public String getDriverClassName() {

            return driverClassName;

        }


        public void setDriverClassName(String driverClassName) {

            this.driverClassName = driverClassName;

        }


        public int getInitialSize() {

            return initialSize;

        }


        public void setInitialSize(int initialSize) {

            this.initialSize = initialSize;

        }


        public int getMinIdle() {

            return minIdle;

        }


        public void setMinIdle(int minIdle) {

            this.minIdle = minIdle;

        }


        public int getMaxActive() {

            return maxActive;

        }


        public void setMaxActive(int maxActive) {

            this.maxActive = maxActive;

        }


        public int getMaxWait() {

            return maxWait;

        }


        public void setMaxWait(int maxWait) {

            this.maxWait = maxWait;

        }


        public int getTimeBetweenEvictionRunsMillis() {

            return timeBetweenEvictionRunsMillis;

        }


        public void setTimeBetweenEvictionRunsMillis(int timeBetweenEvictionRunsMillis) {

            this.timeBetweenEvictionRunsMillis = timeBetweenEvictionRunsMillis;

        }


        public int getMinEvictableIdleTimeMillis() {

            return minEvictableIdleTimeMillis;

        }


        public void setMinEvictableIdleTimeMillis(int minEvictableIdleTimeMillis) {

            this.minEvictableIdleTimeMillis = minEvictableIdleTimeMillis;

        }


        public String getValidationQuery() {

            return validationQuery;

        }


        public void setValidationQuery(String validationQuery) {

            this.validationQuery = validationQuery;

        }


        public boolean isTestWhileIdle() {

            return testWhileIdle;

        }


        public void setTestWhileIdle(boolean testWhileIdle) {

            this.testWhileIdle = testWhileIdle;

        }


        public boolean isTestOnBorrow() {

            return testOnBorrow;

        }


        public void setTestOnBorrow(boolean testOnBorrow) {

            this.testOnBorrow = testOnBorrow;

        }


        public boolean isTestOnReturn() {

            return testOnReturn;

        }


        public void setTestOnReturn(boolean testOnReturn) {

            this.testOnReturn = testOnReturn;

        }


        public boolean isPoolPreparedStatements() {

            return poolPreparedStatements;

        }


        public void setPoolPreparedStatements(boolean poolPreparedStatements) {

            this.poolPreparedStatements = poolPreparedStatements;

        }


        public int getMaxPoolPreparedStatementPerConnectionSize() {

            return maxPoolPreparedStatementPerConnectionSize;

        }


        public void setMaxPoolPreparedStatementPerConnectionSize(int maxPoolPreparedStatementPerConnectionSize) {

            this.maxPoolPreparedStatementPerConnectionSize = maxPoolPreparedStatementPerConnectionSize;

        }


        public String getFilters() {

            return filters;

        }


        public void setFilters(String filters) {

            this.filters = filters;

        }


        public String getConnectionProperties() {

            return connectionProperties;

        }


        public void setConnectionProperties(String connectionProperties) {

            this.connectionProperties = connectionProperties;

        }

    }


}


DRUID过滤器:

@WebFilter(filterName = "druidWebStatFilter", urlPatterns = "/*",

 initParams = {

     // 忽略资源

     @WebInitParam(name = "exclusions", value = "*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*")

 }

)

public class DruidStatFilter extends WebStatFilter {

}


druid数据源状态监控:


@WebServlet(urlPatterns = "/druid/*",

  initParams = {

      // IP白名单 (没有配置或者为空,则允许所有访问)

      @WebInitParam(name = "allow", value = "192.168.1.101,127.0.0.1"),

      // IP黑名单 (存在共同时,deny优先于allow)

      @WebInitParam(name = "deny", value = "192.168.1.73"),

      // 用户名

      @WebInitParam(name = "loginUsername", value = "admin"),

      // 密码

      @WebInitParam(name = "loginPassword", value = "admin"),

      // 禁用HTML页面上的“Reset All”功能

      @WebInitParam(name = "resetEnable", value = "false")

  }

)

public class DruidStatViewServlet extends StatViewServlet {


}


5、从这里就可以编写自己的测试类,直接上代码

package com.shrek.supervisor;


import java.util.Date;

import java.util.List;


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 org.springframework.test.context.web.WebAppConfiguration;


import com.shrek.supervisor.entity.Supervisor;

import com.shrek.supervisor.entity.SupervisorExample;

import com.shrek.supervisor.service.SupervisorService;


@RunWith(SpringRunner.class)

@SpringBootTest

@WebAppConfiguration

public class ShrekSupervisorApplicationTests {

@Autowired

private SupervisorService supervisorService;


public void contextLoads() {

for (int i=1;i<10;i++) {

Supervisor su = new Supervisor();

su.setId(i);

su.setInsertBy(i);

su.setPasswd("123456");

su.setUsername("root"+i);

su.setRoleId(1);

su.setUpdateBy(1);

su.setStatus(1);

su.setUpdateTime(new Date());

su.setInsertTime(new Date());

int a = supervisorService.insert(su);

System.out.println(a);

}

}

@Test

public void getAll() {

SupervisorExample example = new SupervisorExample();

List<Supervisor> list = supervisorService.selectByExample(example);

for(int i=0 ;i<list.size();i++) {

System.out.println(list.get(i).toString());

}

}


}



猜你喜欢

转载自blog.csdn.net/weixin_36104843/article/details/80521309