springboot集成druid和tk.mybatis

這個springboot集成druid和tk.mybatis是在以前Idea搭建多模塊聚合maven項目的基礎上完成的
http://www.javashuo.com/article/p-rvrpgkss-eo.html
1.druid是什麼?
Druid首先是一個數據庫鏈接池。Druid是目前最好的數據庫鏈接池,在功能、性能、擴展性方面,都超過其餘數據庫鏈接池。java

2.tk.mybatis是什麼?
通用Mapper,優勢是能夠緩存,所有針對單表操做,每一個實體類都須要繼承通用Mapper接口來得到通用方法,目前新版也能夠針對多表進行操做,可是就不能使用二級緩存。mysql

3.mybatis-genertor是什麼?
是一款mybatis自動代碼生成工具,能夠經過配置,快速生成mapper和xml文件。git

4.springboot集成mybatis-genertor生成dao層的實體和mapper,我把這個集成放到fire-common層
pom.xmlgithub

<!--模塊依賴-->
    <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.xmlweb

<?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.javaspring

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裏面由於要用註解的緣由sql

<!--模塊依賴-->
    <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

經過註解的方式配置數據庫數據源DruidPropertiessegmentfault

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經過註解類的方式MyBatisConfigapi

/**
 * 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

相關文章
相關標籤/搜索