SpringBoot+MyBatis(generator)+druid整合

最近自己写了一个SpringBoot2.0.2+Mybatis(generator)+druid的demo
首先实现的是mybatis和generator逆向工程生成代码

1.pom文件如下,引入generator插件
<? xml version ="1.0"  encoding ="UTF-8" ?>
< project  xmlns ="http://maven.apache.org/POM/4.0.0"  xmlns: xsi ="http://www.w3.org/2001/XMLSchema-instance"
    xsi :schemaLocation ="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" >
    < modelVersion > 4.0.0 </ modelVersion >

    < groupId > com.cnooc </ groupId >
    < artifactId > wordimg </ artifactId >
    < version > 0.0.1-SNAPSHOT </ version >
    < packaging > jar </ packaging >

    < name > wordimg </ name >
    < description > Demo project for Spring Boot </ description >

    < parent >
      < groupId > org.springframework.boot </ groupId >
      < artifactId > spring-boot-starter-parent </ artifactId >
      < version > 2.0.2.RELEASE </ version >
      < relativePath />   <!-- lookup parent from repository -->
    </ parent >

    < properties >
      < project.build.sourceEncoding > UTF-8 </ project.build.sourceEncoding >
      < project.reporting.outputEncoding > UTF-8 </ project.reporting.outputEncoding >
      < java.version > 1.8 </ java.version >
    </ properties >

    < dependencies >

      < dependency >
          < groupId > org.springframework.boot </ groupId >
          < artifactId > spring-boot-starter-web </ artifactId >
      </ dependency >

      < dependency >
          < groupId > org.springframework.boot </ groupId >
          < artifactId > spring-boot-starter-test </ artifactId >
          < scope > test </ scope >
      </ dependency >

      <!-- 日志输出的-->
      < dependency >
          < groupId > org.projectlombok </ groupId >
          < artifactId > lombok </ artifactId >
      </ dependency >

      <!--mybatis-->
      < dependency >
          < groupId > org.mybatis.spring.boot </ groupId >
          < artifactId > mybatis-spring-boot-starter </ artifactId >
          < version > 1.3.2 </ version >
      </ dependency >

      <!-- 连接数据库-->
      < dependency >
          < groupId > mysql </ groupId >
          < artifactId > mysql-connector-java </ artifactId >
          < scope > runtime </ scope >
      </ dependency >

      <!-- alibaba的druid数据库连接池 -->
      < dependency >
          < groupId > com.alibaba </ groupId >
          < artifactId > druid-spring-boot-starter </ artifactId >
          < version > 1.1.0 </ version >
      </ dependency >

      < dependency >
          < groupId > org.springframework.boot </ groupId >
          < artifactId > spring-boot-starter-data-jpa </ artifactId >
      </ dependency >
    </ dependencies >

    < build >
      < plugins >
          < plugin >
            < groupId > org.springframework.boot </ groupId >
            < artifactId > spring-boot-maven-plugin </ artifactId >
          </ plugin >
          <!--MG的插件-->
          < plugin >
            < groupId > org.mybatis.generator </ groupId >
            < artifactId > mybatis-generator-maven-plugin </ artifactId >
            < version > 1.3.5 </ version >
            < dependencies >
                < dependency >
                  < groupId >  mysql </ groupId >
                  < artifactId >  mysql-connector-java </ artifactId >
                  < version >  5.1.39 </ version >
                </ dependency >
                < dependency >
                  < groupId > org.mybatis.generator </ groupId >
                  < artifactId > mybatis-generator-core </ artifactId >
                  < version > 1.3.5 </ version >
                </ dependency >
            </ dependencies >
            < executions >
                < execution >
                  < id > Generate MyBatis Artifacts </ id >
                  < phase > package </ phase >
                  < goals >
                      < goal > generate </ goal >
                  </ goals >
                </ execution >
            </ executions >
            < configuration >
                <!--允许移动生成的文件 -->
                < verbose > true </ verbose >
                <!-- 是否覆盖 -->
                < overwrite > true </ overwrite >
                <!-- 自动生成的配置 -->
                < configurationFile > src/main/resources/generator/generatorConfig.xml </ configurationFile >
            </ configuration >
          </ plugin >
      </ plugins >
   </build>
</ project >
2.在resources下新建generator文件夹,在generator下新建generatorConfig.xml
<? xml version ="1.0"  encoding ="UTF-8" ?>
<!DOCTYPE   generatorConfiguration
        PUBLIC   "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
        "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd" >
< generatorConfiguration >
    < context  id ="DB2Tables"    targetRuntime ="MyBatis3" >

        < commentGenerator >
            < property  name ="suppressDate"  value ="true" />
            < property  name ="suppressAllComments"  value ="true" />
        </ commentGenerator >

        <!--数据库链接地址账号密码-->
        < jdbcConnection  driverClass ="com.mysql.jdbc.Driver"  connectionURL ="jdbc:mysql://localhost:3306/wordimg"  userId ="root"  password ="root" >
        </ jdbcConnection >
        < javaTypeResolver >
            < property  name ="forceBigDecimals"  value ="false" />
        </ javaTypeResolver >

        <!--生成Model类存放位置-->
        < javaModelGenerator  targetPackage ="com.cnooc.pojo"  targetProject ="src/main/java" >
            < property  name ="enableSubPackages"  value ="true" />
            < property  name ="trimStrings"  value ="true" />
        </ javaModelGenerator >

        <!--生成映射文件存放位置-->
        < sqlMapGenerator  targetPackage ="mapper"  targetProject ="src/main/resources" >
            < property  name ="enableSubPackages"  value ="true" />
        </ sqlMapGenerator >

        <!--生成Dao类存放位置-->
        <!--
        客户端代码,生成易于使用的针对Model对象和XML配置文件 的代码
        type="ANNOTATEDMAPPER",生成Java Model 和基于注解的Mapper对象
        type="MIXEDMAPPER",生成基于注解的Java Model 和相应的Mapper对象
        type="XMLMAPPER",生成SQLMap XML文件和独立的Mapper接口
        -->
        < javaClientGenerator  type ="XMLMAPPER"  targetPackage ="com.cnooc.dao"  targetProject ="src/main/java" >
            < property  name ="enableSubPackages"  value ="true" />
        </ javaClientGenerator >

        <!--生成对应表及类名-->
        <!--<table tableName="t_file" domainObjectName="TFile"></table>-->
        <!--<table tableName="t_file_images" domainObjectName="TFileImages"></table>-->
        <!--生成的pojo中只有实体类-->
        < table  tableName ="t_file"  domainObjectName ="TFile"  enableCountByExample ="false"  enableUpdateByExample ="false"  enableDeleteByExample ="false"  enableSelectByExample ="false"  selectByExampleQueryId ="false" ></ table >
        < table  tableName ="t_file_images"  domainObjectName ="TFileImages"  enableCountByExample ="false"  enableUpdateByExample ="false"  enableDeleteByExample ="false"  enableSelectByExample ="false"  selectByExampleQueryId ="false" ></ table >
    </ context >
</generatorConfiguration>
3.运行generator插件

4.生成如下目录


5.application.yml中的配置 其中包括对druid的配置
spring:
  datasource:
      url: jdbc:mysql://localhost:3306/wordimg?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
  jpa:
    show-sql: true
    properties:
      hibernate:
        hbm2ddl:
          auto: create
mybatis:
  mapper-locations: classpath:mapper/*.xml

6.对druid进行配置

package com.cnooc.config;

import java.sql.SQLException;

import javax.sql.DataSource;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;

import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.support.http.StatViewServlet;
import com.alibaba.druid.support.http.WebStatFilter;

@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.2.25,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;
        }
    }

}

7.单元测试
package  com.cnooc.dao;

import  com.cnooc.pojo.TFile;
import  org.junit.Assert;
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 static  org.junit.Assert.*;

/**
 * Created by Administrator on 2018/6/11.
 */
@RunWith (SpringRunner. class )
@SpringBootTest
public class  TFileMapperTest {

    @Autowired
    private  TFileMapper  tFileMapper ;

    @Test
    public void  insert()  throws  Exception {
        TFile tFile =  new  TFile();
        tFile.setId( 7 );
        tFile.setName( "ceshi" );
        tFile.setType( "ppt" );
        tFile.setHaxi( "1111" );
        tFile.setAddress( "cccc" );
        tFile.setCreateTime( "11111" );
        int  a =  tFileMapper .insert(tFile);
        Assert. assertEquals ( 1 ,a);
    }
}

8.对了启动类上别忘了扫描接口类
package  com.cnooc;

import  org.mybatis.spring.annotation. MapperScan ;
import  org.springframework.boot.SpringApplication;
import  org.springframework.boot.autoconfigure. SpringBootApplication ;

@SpringBootApplication
@MapperScan ( "com.cnooc.dao" )
public class  WordimgApplication {

    public static void  main(String[] args) {
      SpringApplication. run (WordimgApplication. class , args);
   }
}
https://www.jianshu.com/p/c8a01ae9f779       Spring Boot集成Druid数据库连接池
















猜你喜欢

转载自blog.csdn.net/qq_37924396/article/details/80884788