1. 程式人生 > 實用技巧 >mybatis plus mysql 程式碼生成器 示例demo

mybatis plus mysql 程式碼生成器 示例demo

新增依賴

        <!-- mysql 程式碼生成器必須引入-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.46</version>
        </dependency>
        <!-- druid 程式碼生成器必須引入-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.10</version>
        </dependency>
        <!-- mybatis plus 程式碼生成器必須引入-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.1.0</version>
        </dependency>
        <!-- mybatis plus 程式碼生成器依賴 程式碼生成器必須引入-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>3.1.0</version>
        </dependency>
        <!-- 程式碼生成器模板 程式碼生成器必須引入-->
        <dependency>
            <groupId>org.freemarker</groupId>
            <artifactId>freemarker</artifactId>
            <version>2.3.28</version>
        </dependency>
        <!-- lombok 程式碼生成器必須引入-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true
</optional> <version>1.16.22</version> </dependency>

java程式碼

package com.blackcat.blog.util;

import com.baomidou.mybatisplus.annotation.FieldFill;
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.po.TableFill; import com.baomidou.mybatisplus.generator.config.po.TableInfo; import
com.baomidou.mybatisplus.generator.config.rules.NamingStrategy; import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine; import java.util.*; /** * mybatis plus mysql 程式碼生成器 * @author: blackcat * @date: 2020/1/6 17:22 * @Param */ public class MysqlGenerator { public static void main(String[] args) { Map<String, String> param = new HashMap<>(); param.put("projectPath","D:\\project\\blackcat-blog\\blog-base");// 程式碼輸出專案地址 param.put("author","blackcat");// 作者 param.put("url","172.17.0.3:3306/blackcat_blog");// ip/資料庫 param.put("driverName","com.mysql.jdbc.Driver"); param.put("username","root");// 資料庫使用者 param.put("password","111111");// 資料庫密碼 param.put("parent","com.blackcat.blog");// 頂層包結構 param.put("mapper","mapper");// 生成的mapper包名 param.put("entity","entity");// 生成的entity包名 param.put("service","service");// 生成的service包名 param.put("serviceImpl","service.impl");// 生成的serviceImpl包名 param.put("xml","mappers");// 生成的mapper.xml包名 param.put("model","");// 生成的mapper.xml包名下的模組名稱 空則無 如:mappers.shiro param.put("xmlName","Mapper");// 生成的mapper.xml的檔案結尾名稱如UserMapper.xml // 設定模板 freemarker模板:/templates/mapper.xml.ftl velocity模板:/templates/mapper.xml.vm param.put("templatePath","/templates/mapper.xml.ftl");// param.put("table","");//資料庫表名 一張表時使用 // 多表時使用,當陣列大於0時使用陣列 // 示例:String[] tablse={"sys_menu","sys_role","sys_role_menu","sys_user_role","sys_user_role"};// shiro所需表 // shiro所需表 String[] tablse={"sys_menu","sys_role","sys_role_menu","sys_user","sys_user_role"}; generator(param,tablse); } /* * * 程式碼生成 * @author: blackcat * @date: 2020/1/7 13:44 * @Param [param] */ public static void generator(Map<String, String> param,String[] tablse){ // 程式碼生成器 AutoGenerator mpg = new AutoGenerator(); // 全域性配置 GlobalConfig gc = new GlobalConfig(); gc.setOutputDir(param.get("projectPath") + "/src/main/java"); gc.setAuthor(param.get("author")); gc.setOpen(false);// 是否開啟輸出目錄 gc.setServiceName("%sService");// service 命名方式 gc.setServiceImplName("%sServiceImpl");// service impl 命名方式 gc.setMapperName("%sMapper");// 自定義檔案命名,注意 %s 會自動填充表實體屬性! gc.setXmlName("%sMapper");// 自定義檔案命名,注意 %s 會自動填充表實體屬性! gc.setFileOverride(true);// 是否覆蓋已有檔案 gc.setActiveRecord(true);// 開啟 ActiveRecord(活動記錄) 模式 gc.setEnableCache(false);// XML 二級快取 gc.setBaseResultMap(true);// XML 開啟 BaseResultMap gc.setBaseColumnList(false);// XML columList mpg.setGlobalConfig(gc); // 資料來源配置 DataSourceConfig dsc = new DataSourceConfig(); dsc.setUrl("jdbc:mysql://"+param.get("url")+"?useUnicode=true&useSSL=false&characterEncoding=utf8&serverTimezone=UTC"); dsc.setDriverName(param.get("driverName")); dsc.setUsername(param.get("username")); dsc.setPassword(param.get("password")); mpg.setDataSource(dsc); // 包配置 PackageConfig pc = new PackageConfig(); if(!StringUtils.isEmpty(param.get("model"))){ pc.setModuleName(param.get("model")); } pc.setParent(param.get("parent")); pc.setMapper(param.get("mapper")); pc.setEntity(param.get("entity")); pc.setService(param.get("service")); pc.setServiceImpl(param.get("serviceImpl")); pc.setXml(param.get("xml")); mpg.setPackageInfo(pc); // 自定義需要填充的欄位 List<TableFill> tableFillList = new ArrayList(); //如 每張表都有一個建立時間、修改時間如下是配置 TableFill createField = new TableFill("gmt_create", FieldFill.INSERT); TableFill modifiedField = new TableFill("gmt_modified", FieldFill.INSERT_UPDATE); tableFillList.add(createField); tableFillList.add(modifiedField); // 自定義配置 InjectionConfig cfg = new InjectionConfig() { @Override public void initMap() { // to do nothing } }; // 模板引擎 String templatePath = param.get("templatePath"); // 自定義輸出配置 List<FileOutConfig> focList = new ArrayList<>(); // 自定義配置會被優先輸出 這裡設定xml的存放路徑 focList.add(new FileOutConfig(templatePath) { @Override public String outputFile(TableInfo tableInfo) { // 自定義輸出檔名 StringBuilder customPath = new StringBuilder(); customPath.append(param.get("projectPath")); customPath.append("/src/main/resources/"); customPath.append(param.get("xml")); customPath.append("/"); if(!StringUtils.isEmpty(pc.getModuleName())){ customPath.append(pc.getModuleName()); } customPath.append("/"); customPath.append(tableInfo.getEntityName()); customPath.append(param.get("xmlName")); customPath.append(StringPool.DOT_XML); /* return param.get("projectPath") + "/src/main/resources/"+param.get("xml")+"/" + "/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;*/ return customPath.toString(); } }); cfg.setFileOutConfigList(focList); mpg.setCfg(cfg); // 策略配置 StrategyConfig strategy = new StrategyConfig(); //資料庫表對映到實體的命名策略,預設:不做任何改變,原樣輸出 strategy.setNaming(NamingStrategy.underline_to_camel); //資料庫表字段對映到實體的命名策略,未指定按照 naming 執行 strategy.setColumnNaming(NamingStrategy.underline_to_camel); strategy.setEntityLombokModel(true);// 是否使用lombok if (tablse.length > 0) { strategy.setInclude(tablse);// 資料庫表 多表 } else { strategy.setInclude(param.get("table"));// 資料庫表 一張表 } strategy.setControllerMappingHyphenStyle(true);// 駝峰轉連字元 //strategy.setSuperControllerClass("com.sxt.BaseController");// 公共父類 //strategy.setSuperEntityColumns("person_id","person_name");// 寫於父類中的公共欄位 //strategy.setInclude(("表名,多個英文逗號分割").split(","));//要設定生成哪些表 如果不設定就是生成所有的表 mpg.setStrategy(strategy);// 資料庫表配置 // 選擇 freemarker 引擎需要指定如下加,注意 pom 依賴必須有! 預設 Veloctiy mpg.setTemplateEngine(new FreemarkerTemplateEngine()); mpg.execute(); } }

示例程式碼:https://gitee.com/kylin_lawliet/springboot-demos/tree/master/springboot-mybatis-plus-generator

簡單版:MysqlGenerator.class
引數修改版:MysqlGenerator2.class
自定義模板:MysqlGenerator3.class