转载

springboot集成druid和tk.mybatis

这个springboot集成druid和tk.mybatis是在之前Idea搭建多模块聚合maven项目的基础上完成的

https://segmentfault.com/a/1190000021385783

1.druid是什么?

Druid首先是一个数据库连接池。Druid是目前最好的数据库连接池,在功能、性能、扩展性方面,都超过其他数据库连接池。

2.tk.mybatis是什么?

通用Mapper,优点是可以缓存,全部针对单表操作,每个实体类都需要继承通用Mapper接口来获得通用方法,目前新版也可以针对多表进行操作,但是就不能使用二级缓存。

3.mybatis-genertor是什么?

是一款mybatis自动代码生成工具,可以通过配置,快速生成mapper和xml文件。

4.springboot集成mybatis-genertor生成dao层的实体和mapper,我把这个集成放到fire-common层

pom.xml

<!--模块依赖-->
    <dependencies>
            <!--生成mapper所需要的jar-->
            <dependency>
                <groupId>org.mybatis.generator</groupId>
                <artifactId>mybatis-generator-core</artifactId>
                <version>${mybatis-generator.version}</version>
            </dependency>

            <dependency>
                <groupId>tk.mybatis</groupId>
                <artifactId>mapper</artifactId>
                <version>${tk-mybatis.version}</version>
            </dependency>

            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis</artifactId>
                <version>${mybatis.version}</version>
            </dependency>

            <dependency>
                <groupId>org.freemarker</groupId>
                <artifactId>freemarker</artifactId>
                <version>${freemarker.version}</version>
            </dependency>
            <!--生成mapper所需要的jar-->

            <!--mysql链接jar-->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>${mysql-connector-java.version}</version>
            </dependency>
    </dependencies>

genertor.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="MysqlTables" targetRuntime="MyBatis3Simple">
        <property name="javaFileEncoding" value="UTF-8" />
        <property name="javaFileEncoding" value="UTF-8" />
        <property name="useMapperCommentGenerator" value="false" />

        <plugin type="tk.mybatis.mapper.generator.MapperPlugin">
            <property name="mappers"
                      value="tk.mybatis.mapper.common.Mapper" />
            <property name="caseSensitive" value="true" />
            <property name="forceAnnotation" value="true" />
            <property name="beginningDelimiter" value="`" />
            <property name="endingDelimiter" value="`" />
        </plugin>

        <plugin type="tk.mybatis.mapper.generator.TemplateFilePlugin">
            <property name="targetProject"
                      value="E:/IdeaProject/fire/fire-dao/src/main/java" />
            <property name="targetPackage" value="cn.yskcoder.fire.dao" />
            <property name="mapperSuffix" value="Dao" />
            <property name="templatePath" value="generator/mapper.ftl" />
            <property name="fileName"
                      value="${tableClass.shortClassName}${mapperSuffix}.java" />
        </plugin>

        <!--去除注释 -->
        <commentGenerator>
            <property name="suppressDate" value="true" />
            <property name="suppressAllComments" value="true" />
        </commentGenerator>
        <!-- 数据库链接URL、用户名、密码 -->
        <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                        connectionURL="jdbc:mysql://localhost:3306/fire" userId="root"
                        password="123456">
        </jdbcConnection>
        <javaTypeResolver>
            <property name="useJSR310Types" value="true" />
        </javaTypeResolver>
        <!-- ★★★生成实体类的包名和位置★★★要保证目录存在 -->
        <javaModelGenerator
                targetPackage="cn.yskcoder.fire.model"
                targetProject="E:/IdeaProject/fire/fire-dao/src/main/java">
            <property name="enableSubPackages" value="true" />
            <property name="trimStrings" value="true" />
        </javaModelGenerator>

        <!-- ★★★生成的映射文件包名和位置★★★要保证目录存在 -->
        <sqlMapGenerator targetPackage="mapper"
                         targetProject="E:/IdeaProject/fire/fire-dao/src/main/resources">
            <property name="enableSubPac kages" value="false" />
        </sqlMapGenerator>

        <!-- 要生成那些表(更改tableName就可以); %为通配符,可以生成全部表 -->
        <!-- <table tableName="B%" enableCountByExample="false" -->
        <table tableName="sys_user" enableCountByExample="false"
               enableUpdateByExample="false" enableDeleteByExample="false"
               enableSelectByExample="false" selectByExampleQueryId="false" />
    </context>
</generatorConfiguration>

Genertor.java

package cn.yskcoder.fire.generator;

import org.mybatis.generator.api.MyBatisGenerator;
import org.mybatis.generator.config.Configuration;
import org.mybatis.generator.config.xml.ConfigurationParser;
import org.mybatis.generator.internal.DefaultShellCallback;

import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;


/**
 * 自动生成Mybatis相关的代码和配置文件
 *
 * @author: yskcoder
 * @createDate: 2019/12/25 18:59
 * @version: 1.0
 */
public class Generator {
    public static void main(String[] args) throws Exception {
        List<String> warnings = new ArrayList<String>();
        boolean overwrite = true;
        ConfigurationParser cp = new ConfigurationParser(warnings);
        InputStream stream = Class.class.getResourceAsStream("/mybatis-generator.xml");
        Configuration config =
                cp.parseConfiguration(stream);
        DefaultShellCallback callback = new DefaultShellCallback(overwrite);
        MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
        myBatisGenerator.generate(null);
        for (String warning : warnings) {
            System.out.println(warning);
        }
        System.out.println("恭喜你,生成Mybatis相关的代码完成!");
    }
}

5.springboot集成druid和tk.mybatis

pom.xml,这里将spring-boot-starter-web放到了fire-service里面因为要用注解的原因

<!--模块依赖-->
    <dependencies>
        <dependency>
            <groupId>cn.yskcoder.fire</groupId>
            <artifactId>fire-service</artifactId>
            <version>v1.0</version>
        </dependency>

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

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

        <!-- 阿里巴巴druid数据库连接池 -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>${druid.version}</version>
        </dependency>

        <!--mybatis-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>${mybatis-spring-boot-starter.version}</version>
        </dependency>

        <!--mapper-->
        <dependency>
            <groupId>tk.mybatis</groupId>
            <artifactId>mapper-spring-boot-starter</artifactId>
            <version>${mapper-spring-boot-tarter.version}</version>
        </dependency>
    </dependencies>

application.yml

##########################################################
##################  Fire项目的配置  #######################
##########################################################


###################  项目启动端口  ########################
server:
  port: 80

###################  spring配置  #########################
spring:
  profiles:
    datasource:
      url: jdbc:mysql://localhost:3306/fire?autoReconnect=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowMultiQueries=true&jdbcCompliantTruncation=false&serverTimezone=GMT%2B8
      username: root
      password: 123456
    resources:
     static-locations: classpath:/webapp/
  mvc:
    static-path-pattern: /static/**
    view:
      prefix: /WEB-INF/view/


###################  tk.mybaties配置  #########################
mybatis:
    type-aliases-package: cn.yskcoder.fire.model
    mapper-locations: classpath*:mapper/*.xml

通过注解的方式配置数据库数据源DruidProperties

Component
@ConfigurationProperties(prefix = "spring.datasource")
public class DruidProperties {

    private String url = "jdbc:mysql://127.0.0.1:3306/fire?autoReconnect=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull";

    private String username = "root";

    private String password = "123456";

    private String driverClassName = "com.mysql.cj.jdbc.Driver";

    private Integer initialSize = 4;

    private Integer minIdle = 2;

    private Integer maxActive = 30;

    private Integer maxWait = 60000;

    private Integer timeBetweenEvictionRunsMillis = 60000;

    private Integer minEvictableIdleTimeMillis = 300000;

    private String validationQuery = "SELECT 'x'";

    private Boolean testWhileIdle = true;

    private Boolean testOnBorrow = false;

    private Boolean testOnReturn = false;

    private Boolean poolPreparedStatements = true;

    private Integer maxPoolPreparedStatementPerConnectionSize = 30;

    private String filters = "stat";


    public DataSource config(DruidDataSource dataSource){
        dataSource.setUrl(url);
        dataSource.setUsername(username);
        dataSource.setPassword(password);

        dataSource.setDriverClassName(driverClassName);
        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);

        // 打开PSCache,并且指定每个连接上PSCache的大小
        dataSource.setPoolPreparedStatements(poolPreparedStatements);
        dataSource.setMaxPoolPreparedStatementPerConnectionSize(maxPoolPreparedStatementPerConnectionSize);

        try {
            dataSource.setFilters(filters);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        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 Integer getInitialSize() {
        return initialSize;
    }

    public void setInitialSize(Integer initialSize) {
        this.initialSize = initialSize;
    }

    public Integer getMinIdle() {
        return minIdle;
    }

    public void setMinIdle(Integer minIdle) {
        this.minIdle = minIdle;
    }

    public Integer getMaxActive() {
        return maxActive;
    }

    public void setMaxActive(Integer maxActive) {
        this.maxActive = maxActive;
    }

    public Integer getMaxWait() {
        return maxWait;
    }

    public void setMaxWait(Integer maxWait) {
        this.maxWait = maxWait;
    }

    public Integer getTimeBetweenEvictionRunsMillis() {
        return timeBetweenEvictionRunsMillis;
    }

    public void setTimeBetweenEvictionRunsMillis(Integer timeBetweenEvictionRunsMillis) {
        this.timeBetweenEvictionRunsMillis = timeBetweenEvictionRunsMillis;
    }

    public Integer getMinEvictableIdleTimeMillis() {
        return minEvictableIdleTimeMillis;
    }

    public void setMinEvictableIdleTimeMillis(Integer minEvictableIdleTimeMillis) {
        this.minEvictableIdleTimeMillis = minEvictableIdleTimeMillis;
    }

    public String getValidationQuery() {
        return validationQuery;
    }

    public void setValidationQuery(String validationQuery) {
        this.validationQuery = validationQuery;
    }

    public Boolean getTestWhileIdle() {
        return testWhileIdle;
    }

    public void setTestWhileIdle(Boolean testWhileIdle) {
        this.testWhileIdle = testWhileIdle;
    }

    public Boolean getTestOnBorrow() {
        return testOnBorrow;
    }

    public void setTestOnBorrow(Boolean testOnBorrow) {
        this.testOnBorrow = testOnBorrow;
    }

    public Boolean getTestOnReturn() {
        return testOnReturn;
    }

    public void setTestOnReturn(Boolean testOnReturn) {
        this.testOnReturn = testOnReturn;
    }

    public Boolean getPoolPreparedStatements() {
        return poolPreparedStatements;
    }

    public void setPoolPreparedStatements(Boolean poolPreparedStatements) {
        this.poolPreparedStatements = poolPreparedStatements;
    }

    public Integer getMaxPoolPreparedStatementPerConnectionSize() {
        return maxPoolPreparedStatementPerConnectionSize;
    }

    public void setMaxPoolPreparedStatementPerConnectionSize(Integer maxPoolPreparedStatementPerConnectionSize) {
        this.maxPoolPreparedStatementPerConnectionSize = maxPoolPreparedStatementPerConnectionSize;
    }

    public String getFilters() {
        return filters;
    }

    public void setFilters(String filters) {
        this.filters = filters;
    }
}

配置mybatis通过注解类的方式MyBatisConfig

/**
 * mybatisConfig配置类
 *
 * @author:       yskcoder
 * @createDate:   2019/12/25 16:20
 * @version:      1.0
*/
@Configuration
public class MyBatisConfig {
    @Autowired
    DruidProperties druidProperties;


    /**
     * Fire数据源
     */
    private DruidDataSource dataSource() {
        DruidDataSource dataSource = new DruidDataSource();
        druidProperties.config(dataSource);
        return dataSource;
    }

    @Bean
    public DruidDataSource datasource() {
        return dataSource();
    }
}

6.具体的代码可以参考Fire

https://github.com/yskcoder/Fire
原文  https://segmentfault.com/a/1190000021399317
正文到此结束
Loading...