十七、Spring Boot整合Mybatis+Druid

(一)添加依赖

		<!-- jdbc -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-jdbc</artifactId>
		</dependency>
		<!-- mybatis -->
		<dependency>
			<groupId>org.mybatis.spring.boot</groupId>
			<artifactId>mybatis-spring-boot-starter</artifactId>
			<version>1.3.2</version>
		</dependency>
		<!-- mysql -->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<scope>runtime</scope>
		</dependency>
		<!-- Druid连接池 -->
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>druid-spring-boot-starter</artifactId>
			<version>1.1.10</version>
		</dependency>
		<!--log4j 没有的话,会报错-->
		<dependency>
			<groupId>log4j</groupId>
			<artifactId>log4j</artifactId>
			<version>1.2.17</version>
		</dependency>

(二)配置Druid和Mybatis
  我删除了application.xml,使用了更简洁的application.yml,配置文件如下:

spring:
    datasource:
        #JDBC配置
        name: test
        url: jdbc:mysql://127.0.0.1:3306/tomcat
        username: root
        password: root
        driver-class-name: com.mysql.jdbc.Driver

        # 使用druid数据源
        type: com.alibaba.druid.pool.DruidDataSource

        #--------------------Druid 连接池配置 start-----------------------------
        druid:
          #初始化大小,最小,最大
          initial-size: 5
          min-idle: 1
          max-active: 50
          #配置获取连接等待超时时间
          max-wait: 60000
          # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
          time-between-eviction-runs-millis: 60000
          # 配置一个连接在池中最小生存的时间,单位是毫秒
          min-evictable-idle-time-millis: 300000
          validation-query: SELECT 1 FROM DUAL
          test-while-idle: true
          test-on-borrow: false
          test-on-return: false
          # 打开PSCache,并且指定每个连接上PSCache的大小
          pool-prepared-statements: false
          max-pool-prepared-statement-per-connection-size: 20

          #--------------------监控配置 start-----------------------------
          # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
          filters: stat,wall,log4j
          # 通过connectProperties属性来打开mergeSql功能;慢SQL记录
          connection-properties: druid.stat.mergeSql=true
          filter:
            stat:
              slow-sql-millis: 5000

        #--------------------Druid 连接池配置 end-----------------------------

#mybatis配置
mybatis:
  #配置mapper文件所在的位置
  mapper-locations: classpath:mybatis/mappers/*.xml
  #配置实体类的位置,这样在mapper文件中的返回值类型直接写User即可(否则要加上包名.类名)  
  type-aliases-package: org.pc.entity

(三)创建Druid监控配置类(没有这,监控无法启动)

/**
 * Druid的DataResource配置类(这个类主要用于Druid的监控使用):
 *     凡是被Spring管理的类,实现接口 EnvironmentAware 重写方法 setEnvironment 可以在工程启动时,
 * 获取到系统环境变量和application配置文件中的变量。
 *     还有一种方式是采用注解的方式获取 @value("${变量的key值}")获取application配置文件中的变量。
 *     这里采用第一种要方便些。
 */
@Configuration
@EnableTransactionManagement
public class DruidDataSourceConfig {
    /**
     * 配置servlet
     */
    @Bean
    public ServletRegistrationBean druidServlet(){
        ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean();
        servletRegistrationBean.setServlet(new StatViewServlet());
        servletRegistrationBean.addUrlMappings("/druid/*");
        Map<String, String> initParams = new HashMap<>();
        // 禁用HTML页面上的“Reset All”功能
        initParams.put("resetEnable", "false");
        // IP白名单 (没有配置或者为空,则允许所有访问)
        initParams.put("allow", "127.0.0.1");
        //IP黑名单 (不许访问)(存在共同时,deny优先于allow)
        initParams.put("deny", "127.0.0.1");
        servletRegistrationBean.setInitParameters(initParams);
        return servletRegistrationBean;
    }
    /**
     * 配置filter
     */
    @Bean
    public FilterRegistrationBean filterRegistrationBean(){
        FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
        filterRegistrationBean.setFilter(new WebStatFilter());
        filterRegistrationBean.addUrlPatterns("/*");
        filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*");
        return filterRegistrationBean;
    }
    // 按照BeanId来拦截配置 用来bean的监控
    @Bean(value = "druid-stat-interceptor")
    public DruidStatInterceptor druidStatInterceptor(){
        DruidStatInterceptor druidStatInterceptor = new DruidStatInterceptor();
        return druidStatInterceptor;
    }
    @Bean
    public BeanNameAutoProxyCreator beanNameAutoProxyCreator(){
        BeanNameAutoProxyCreator beanNameAutoProxyCreator = new BeanNameAutoProxyCreator();
        beanNameAutoProxyCreator.setProxyTargetClass(true);
        beanNameAutoProxyCreator.setInterceptorNames("druid-stat-interceptor");
        return beanNameAutoProxyCreator;
    }
}

(四)修改启动类
  主要适用于配置Druid监控和Mybatis的接口所在的包:
  配置Druid监控:@ServletComponentScan
  Mybatis的接口:@MapperScan(“org.pc.dao”)

/**
 * @ServletComponentScan 设置启动时spring能够扫描到我们自己编写的servlet和filter, 用于Druid监控
 * @MapperScan 用于扫描的mapper接口
 */
@ServletComponentScan
@MapperScan("org.pc.dao")
@SpringBootApplication
public class MybatisDruidApplication {

	public static void main(String[] args) {
		SpringApplication.run(MybatisDruidApplication.class, args);
	}
}

(五)测试
  按照Controller、Service、Dao层进行测试即可。

猜你喜欢

转载自blog.csdn.net/panchang199266/article/details/82888758