天天看點

SpringBoot學習:(三)Mybatis-Plus整合

Mybatis-Plus可通過代碼自動生成實體類、Mapper、Service、Controller等

為了快速建立代碼,可使用Mybatis-Plus幫我們自動建立

  1. 在POM中添加依賴
<!--mybatis-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.1.2</version>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.1.2</version>
        </dependency>
        <!--代碼生成-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>3.2.0</version>
        </dependency>
        <!--代碼生成使用的模版引擎-->
        <dependency>
            <groupId>com.ibeetl</groupId>
            <artifactId>beetl</artifactId>
            <version>2.9.3</version>
        </dependency>
        <dependency>
            <groupId>org.freemarker</groupId>
            <artifactId>freemarker</artifactId>
            <version>2.3.31</version>
        </dependency>
           
  1. 建立一個代碼生成器的類 建立一個自動生成器
    AutoGenerator autoGenerator = new AutoGenerator();
               
  2. 設定資料庫連結配置,可根據資料庫中的表來自動生成哪些表對應的類 ,并将配置放進autoGenerator中
    //配置資料庫連結
    DataSourceConfig dataSourceConfig= new DataSourceConfig();
    dataSourceConfig.setUrl("jdbc:mysql://localhost:3306/ttt?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true");
    dataSourceConfig.setUsername("root");
    dataSourceConfig.setPassword("root");
    dataSourceConfig.setDriverName("com.mysql.cj.jdbc.Driver");
    dataSourceConfig.setTypeConvert(new MySqlTypeConvert(){
        @Override
        public DbColumnType processTypeConvert(GlobalConfig globalConfig, String fieldType) {
            //将資料庫中的特殊類型轉換成想要的類型
            //将資料庫中datetime轉換成DATE
            if ( fieldType.toLowerCase().contains("datetime") ) {
                return DbColumnType.DATE;
            }
            return (DbColumnType) super.processTypeConvert(globalConfig, fieldType);
        }
    });
    autoGenerator.setDataSource(dataSourceConfig);
               
  3. 公共配置 :配置項目的路徑(用于生成檔案時将檔案生成的位置) ,設定檔案生成是否覆寫,設定檔案生成的名字樣式等,并将配置放進autoGenerator中
    //公用配置
    GlobalConfig globalConfig= new GlobalConfig();
    globalConfig.setOutputDir(PROJECTPATH + "/src/main/java");
    globalConfig.setAuthor("xxx");
    //日期類型的字段使用哪個類型,預設是 java8的 日期類型,此處改為 java.util.date
    globalConfig.setDateType(DateType.ONLY_DATE);
    //是否覆寫 已存在檔案,預設 false 不覆寫
    globalConfig.setFileOverride(true);
    //mapper.xml 是否生成 ResultMap,預設 false 不生成
    globalConfig.setBaseResultMap(true);
    //mapper.xml 是否生成 ColumnList,預設 false 不生成
    globalConfig.setBaseColumnList(true);
    globalConfig.setMapperName("%sMapper");
    globalConfig.setServiceName("%sService");
    globalConfig.setXmlName("%sMapper");
    autoGenerator.setGlobalConfig(globalConfig);
               
  4. 包配置:設定檔案生成的具體包 比如實體類生成在基礎包(com.test.swagger)下的bean包下,并将配置放進autoGenerator中
    PackageConfig pc = new PackageConfig();
      pc.setParent(PACKAGE);//設定基礎包
      // pc.setModuleName("bean"); 子子產品包名,最終生成的是類似  com.zhiyi.tiku.entity 這樣的 不用寫, 預設就是 entity
      pc.setEntity("bean");
      pc.setController("controller");
      pc.setService("service");
      pc.setMapper("mapper");
      autoGenerator.setPackageInfo(pc);
               
  5. 政策配置:設定命名方式,生成字段是否添加注解 ,是否啟用 Lombok,并将配置放進autoGenerator中
    StrategyConfig strategy = new StrategyConfig();
       // 此處配置為 下劃線轉駝峰命名
       strategy.setNaming(NamingStrategy.underline_to_camel);
       //生成的字段 是否添加注解,預設false
       strategy.setEntityTableFieldAnnotationEnable(true);
       //表字首,配置後 生成的的代碼都會把字首去掉
       strategy.setTablePrefix("t_");
       //是否啟用 Lombok
       strategy.setEntityLombokModel(true);
       //是否啟用 builder 模式 例:new DevDevice().setDealerId("").setDeviceCode("");
       strategy.setEntityBuilderModel(true);
       autoGenerator.setStrategy(strategy);
               
  6. 模闆配置:可設定什麼類生成 ,什麼類不生成
    TemplateConfig templateConfig = new TemplateConfig();
       //不生成什麼就設定為null值
        templateConfig.setController(null);
        templateConfig.setService(null);
        templateConfig.setServiceImpl(null);
        templateConfig.setMapper(null);
        templateConfig.setXml(null);
        autoGenerator.setTemplate(templateConfig);
               
  7. 模闆引擎配置:MyBatis-Plus 支援 Velocity(預設)、Freemarker、Beetl,使用者可以選擇自己熟悉的模闆引擎,如果都不滿足您的要求,可以采用自定義模闆引擎。
    autoGenerator.setTemplateEngine(new BeetlTemplateEngine());
               
  8. 自動生成器執行
    autoGenerator.execute(); 
               

Mybatis-Plus學習路徑:https://mp.baomidou.com/guide/

整體代碼

package com.test.swagger;

import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.DbColumnType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.BeetlTemplateEngine;

public class CodeGenerator {

    /**
     * 擷取項目目錄
     */
    private static final String PROJECTPATH = System.getProperty("user.dir");
    /**
     * 項目基礎包
     */
    private static final String PACKAGE = "com.test.swagger";

    public static void main(String[] args) {

        //自動生成器
        AutoGenerator autoGenerator = new AutoGenerator();
        //配置資料庫連結
        DataSourceConfig dataSourceConfig= new DataSourceConfig();
        dataSourceConfig.setUrl("jdbc:mysql://localhost:3306/ttt?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true");
        dataSourceConfig.setUsername("root");
        dataSourceConfig.setPassword("root");
        dataSourceConfig.setDriverName("com.mysql.cj.jdbc.Driver");
        dataSourceConfig.setTypeConvert(new MySqlTypeConvert(){
            @Override
            public DbColumnType processTypeConvert(GlobalConfig globalConfig, String fieldType) {
                //将資料庫中的特殊類型轉換成想要的類型
                //将資料庫中datetime轉換成DATE
                if ( fieldType.toLowerCase().contains("datetime") ) {
                    return DbColumnType.DATE;
                }
                return (DbColumnType) super.processTypeConvert(globalConfig, fieldType);
            }
        });
        autoGenerator.setDataSource(dataSourceConfig);

        //公用配置
        GlobalConfig globalConfig= new GlobalConfig();
        globalConfig.setOutputDir(PROJECTPATH + "/src/main/java");
        globalConfig.setAuthor("xxx");
        //日期類型的字段使用哪個類型,預設是 java8的 日期類型,此處改為 java.util.date
        globalConfig.setDateType(DateType.ONLY_DATE);
        //是否覆寫 已存在檔案,預設 false 不覆寫
        globalConfig.setFileOverride(true);
        //mapper.xml 是否生成 ResultMap,預設 false 不生成
        globalConfig.setBaseResultMap(true);
        //mapper.xml 是否生成 ColumnList,預設 false 不生成
        globalConfig.setBaseColumnList(true);
        globalConfig.setMapperName("%sMapper");
        globalConfig.setServiceName("%sService");
        globalConfig.setXmlName("%sMapper");
        autoGenerator.setGlobalConfig(globalConfig);

        PackageConfig pc = new PackageConfig();
        pc.setParent(PACKAGE);
       // pc.setModuleName("bean"); 子子產品包名,最終生成的是類似  com.zhiyi.tiku.entity 這樣的 不用寫, 預設就是 entity
        pc.setEntity("bean");
        pc.setController("controller");
        pc.setService("service");
        pc.setMapper("mapper");
        autoGenerator.setPackageInfo(pc);

        StrategyConfig strategy = new StrategyConfig();
        // 此處配置為 下劃線轉駝峰命名
        strategy.setNaming(NamingStrategy.underline_to_camel);
        //生成的字段 是否添加注解,預設false
        strategy.setEntityTableFieldAnnotationEnable(true);
        //表字首,配置後 生成的的代碼都會把字首去掉
        strategy.setTablePrefix("t_");
        //是否啟用 Lombok
        strategy.setEntityLombokModel(true);
        //是否啟用 builder 模式 例:new DevDevice().setDealerId("").setDeviceCode("");
        strategy.setEntityBuilderModel(true);
        autoGenerator.setStrategy(strategy);


        TemplateConfig templateConfig = new TemplateConfig();
        //不生成什麼就設定為null值
        templateConfig.setController(null);
        templateConfig.setService(null);
        templateConfig.setServiceImpl(null);
        templateConfig.setMapper(null);
        templateConfig.setXml(null);
        autoGenerator.setTemplate(templateConfig);
        //使用beetl模版引擎
        autoGenerator.setTemplateEngine(new BeetlTemplateEngine());
        autoGenerator.execute();

    }
}