天天看點

springboot項目 mybatis_plus自動生成entity service controller mapper mapper.xml

github位址:https://github.com/heng1234/mybatis_plus 

package com.hlvy.mybatis_plus.generator;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;
import com.baomidou.mybatisplus.core.toolkit.StringPool;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.InjectionConfig;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.builder.ConfigBuilder;
import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert;
import com.baomidou.mybatisplus.generator.config.po.TableInfo;
import com.baomidou.mybatisplus.generator.config.rules.FileType;
import com.baomidou.mybatisplus.generator.config.rules.IColumnType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;

import java.util.*;

/**
 * CodeGenerator
 *
 * @author heng
 * @date 2019/4/11
 **/
public class CodeGenerator {


    /**
     * <p>
     * 讀取控制台内容
     * </p>
     */
    public static String scanner(String tip) {
        Scanner scanner = new Scanner(System.in);
        StringBuilder help = new StringBuilder();
        help.append("請輸入" + tip + ":");
        System.out.println(help.toString());
        if (scanner.hasNext()) {
            String ipt = scanner.next();
            if (StringUtils.isNotEmpty(ipt)) {
                return ipt;
            }
        }
        throw new MybatisPlusException("請輸入正确的" + tip + "!");
    }

    public static void main(String[] args) {
        // 代碼生成器
        AutoGenerator mpg = new AutoGenerator();

        /*注意!如果您選擇了非預設引擎,需要在 AutoGenerator 中 設定模闆引擎。*/
        // set freemarker engine
        mpg.setTemplateEngine(new FreemarkerTemplateEngine());



        // 全局配置
        GlobalConfig gc = new GlobalConfig();
      //  String projectPath = System.getProperty("user.dir");
        System.err.println(System.getProperty("user.dir")+"--------------");
        gc.setOutputDir("E:\\mybatigenrator");//生成檔案的輸出目錄
        //是否在xml中添加二級緩存配置
        gc.setAuthor("heng");//開發人員
        gc.setFileOverride(false);//是否覆寫已有檔案
        gc.setOpen(true);//是否打開輸出目錄
        gc.setEnableCache(false);//是否在xml中添加二級緩存配置
        gc.setSwagger2(false); //實體屬性 Swagger2 注解
        gc.setKotlin(false);// Kotlin 模式
        gc.setActiveRecord(false);//開啟 ActiveRecord 模式
        gc.setBaseResultMap(false);//開啟 BaseResultMap
        gc.setBaseColumnList(false);//開啟 baseColumnList
        mpg.setGlobalConfig(gc);

        // 資料源配置
        DataSourceConfig dsc = new DataSourceConfig();
        //資料庫連接配接
        dsc.setUrl("jdbc:mysql://localhost:3306/資料庫名?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=GMT");
        // dsc.setSchemaName("public");
        dsc.setDriverName("com.mysql.jdbc.Driver");//驅動
        dsc.setUsername("使用者名");//使用者名
        dsc.setPassword("密碼");//密碼
        dsc.setDbType(DbType.MYSQL);//資料庫類型
//        類型轉換
//        預設由 dbType 類型決定選擇對應資料庫内置實作
//        實作 ITypeConvert 接口自定義資料庫 字段類型 轉換為自己需要的 java 類型,内置轉換類型無法滿足可實作 IColumnType 接口自定義
        dsc.setTypeConvert(new MySqlTypeConvert(){
            @Override
            public IColumnType processTypeConvert(GlobalConfig globalConfig, String fieldType){
                System.out.println("轉換類型:" + fieldType);
                // 注意!!processTypeConvert 存在預設類型轉換,如果不是你要的效果請自定義傳回、非如下直接傳回。
                return  super.processTypeConvert(globalConfig,fieldType);
            }
        });
        mpg.setDataSource(dsc);

        // 包配置
        PackageConfig pc = new PackageConfig();
        pc.setModuleName(scanner("子產品名:"));//moduleName
        pc.setController("controller");//controller 控制器模闆
        pc.setService("service");//Service 類模闆
        pc.setServiceImpl("service.impl");//Service impl 實作類模闆
        pc.setEntity("entity");//Java 實體類模闆
        pc.setMapper("mapper");//mapper 模闆
        pc.setParent("com.hlvy.mybatis_plus");//父包名。如果為空,将下面子包名必須寫全部, 否則就隻需寫子包名
        pc.setXml("mapperxml");//xml
        mpg.setPackageInfo(pc);

        // 自定義配置
        InjectionConfig cfg = new InjectionConfig() {
            @Override
            public void initMap() {
             /*   Map<String, Object> map = new HashMap<>();
                map.put("abc", this.getConfig().getGlobalConfig().getAuthor() + "-mp");
                this.setMap(map);*/
            }
        };

        // 如果模闆引擎是 freemarker
        String templatePath = "/templates/mapper.xml.ftl";
        // 如果模闆引擎是 velocity
        // String templatePath = "/templates/mapper.xml.vm";

        // 自定義輸出配置
        List<FileOutConfig> focList = new ArrayList<>();
        // 自定義配置會被優先輸出
        focList.add(new FileOutConfig(templatePath) {
            @Override
            public String outputFile(TableInfo tableInfo) {
                // 自定義輸出檔案名 , 如果你 Entity 設定了前字尾、此處注意 xml 的名稱會跟着發生變化!!
                return   "E:/mybatigenrator/" + pc.getModuleName()
                        + "/" + tableInfo.getEntityName() + "Mapper"+StringPool.DOT_XML;
            }
        });

      /*  cfg.setFileCreate(new IFileCreate() {
            @Override
            public boolean isCreate(ConfigBuilder configBuilder, FileType fileType, String filePath) {
                // 判斷自定義檔案夾是否需要建立
                checkDir("E:/mybatigenrator");
                return false;
            }
        });*/
        cfg.setFileOutConfigList(focList);
       mpg.setCfg(cfg);

        // 配置模闆
        TemplateConfig templateConfig = new TemplateConfig();

        // 配置自定義輸出模闆
        //指定自定義模闆路徑,注意不要帶上.ftl/.vm, 會根據使用的模闆引擎自動識别
        // templateConfig.setEntity("templates/entity2.java");
        // templateConfig.setService();
        // templateConfig.setController();

        templateConfig.setXml(null);
        mpg.setTemplate(templateConfig);

        // 政策配置
        StrategyConfig strategy = new StrategyConfig();
        strategy.setCapitalMode(false);// 全局大寫命名 ORACLE 注意
        strategy.setSkipView(true);//是否跳過視圖
        strategy.setNaming(NamingStrategy.underline_to_camel);//資料庫表映射到實體的命名政策
        //strategy.setColumnNaming(NamingStrategy.underline_to_camel);//資料庫表字段映射到實體的命名政策, 未指定按照 naming 執行
        strategy.setTablePrefix(new String[]{"t_"});//表字首
        //strategy.setFieldPrefix(new String[]{});//自動擋字首

        //strategy.setSuperEntityClass("com.hlvy.mybatis_plus.common.BaseEntity");//自定義繼承的Entity類全稱,帶包名
        strategy.setEntityLombokModel(false);//【實體】是否為lombok模型(預設 false)
        strategy.setRestControllerStyle(true);//Boolean類型字段是否移除is字首(預設 false)
        //strategy.setSuperControllerClass("com.baomidou.ant.common.BaseController");//自定義繼承的Controller類全稱,帶包名
        strategy.setInclude(scanner("表名,多個英文逗号分割").split(","));//需要包含的表名,允許正規表達式(與exclude二選一配置)
        //strategy.setSuperEntityColumns("id");//自定義基礎的Entity類,公共字段
        strategy.setControllerMappingHyphenStyle(true);//駝峰轉連字元
        strategy.setEntityTableFieldAnnotationEnable(true);//是否生成實體時,生成字段注解
        //strategy.setVersionFieldName("");//樂觀鎖名稱
        mpg.setStrategy(strategy);
        mpg.setTemplateEngine(new FreemarkerTemplateEngine());
        mpg.execute();
    }
}
           

pom.xml

<?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>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.4.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.hlvy</groupId>
    <artifactId>mybatis_plus</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>mybatis_plus</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

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

        <!--引入 MyBatis-Plus 之後請不要再次引入 MyBatis 以及 MyBatis-Spring,以避免因版本差異導緻的問題-->
       <!-- <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.0.1</version>
        </dependency>-->

        <!--mysql-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
<!--mybatis-plus-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.1.0</version>
        </dependency>
<!--mybatis-plus-generator-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>3.1.0</version>
        </dependency>

        <!--lombok-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <!--freemarker-->
        <dependency>
            <groupId>org.freemarker</groupId>
            <artifactId>freemarker</artifactId>
            <version>2.3.28</version>
        </dependency>

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

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>
           

繼續閱讀