Java MyBatis-Plus 程式碼生成器
阿新 • • 發佈:2020-08-10
原文:
https://www.jianshu.com/p/8bf62ad92f54
https://mp.baomidou.com/config/generator-config.html#datetype
pom.xml的依賴
<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.3.2</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <!-- 程式碼生成器 --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-generator</artifactId> <version>3.3.2</version> </dependency> <!-- 模板引擎 --> <dependency> <groupId>org.apache.velocity</groupId> <artifactId>velocity-engine-core</artifactId> <version>2.2</version> </dependency>
核心程式碼
package com.example.test5.support; import com.baomidou.mybatisplus.annotation.DbType; import com.baomidou.mybatisplus.annotation.FieldFill; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.generator.AutoGenerator; import com.baomidou.mybatisplus.generator.InjectionConfig; import com.baomidou.mybatisplus.generator.config.*; import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert; import com.baomidou.mybatisplus.generator.config.po.TableFill; import com.baomidou.mybatisplus.generator.config.po.TableInfo; import com.baomidou.mybatisplus.generator.config.rules.DateType; import com.baomidou.mybatisplus.generator.config.rules.DbColumnType; import com.baomidou.mybatisplus.generator.config.rules.IColumnType; import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy; import java.io.File; import java.util.ArrayList; import java.util.List; public class class2 { private static String projectPath = null; public static void main(String[] args) { projectPath = System.getProperty("user.dir"); AutoGenerator autoGenerator = new AutoGenerator(); autoGenerator.setGlobalConfig(configGlobalConfig()); autoGenerator.setDataSource(configDataSource()); autoGenerator.setStrategy(configStrategyConfig()); autoGenerator.setPackageInfo(configPackageConfig()); autoGenerator.setCfg(customerConfig()); autoGenerator.execute(); } /** * 自定義生成檔案配置 * * @return */ private static InjectionConfig customerConfig() { InjectionConfig config = new InjectionConfig() { @Override public void initMap() { } }; List<FileOutConfig> files = new ArrayList<FileOutConfig>(); files.add(new FileOutConfig("/templates/template.java.vm") { @Override public String outputFile(TableInfo tableInfo) { String expand = "c:/pms/expand"; String entityFile = String.format((expand + File.separator + "%s" + ".java"), tableInfo.getControllerName()); return entityFile; } }); config.setFileOutConfigList(files); return config; } /** * 全域性配置 * * @return */ private static GlobalConfig configGlobalConfig() { GlobalConfig config = new GlobalConfig(); // 是否支援AR模式 config.setActiveRecord(true) // 作者 .setAuthor("[email protected]") // 生成路徑 // .setOutputDir(projectPath + "/src/main/java/") .setOutputDir("c:/pms/src/main/java/") // 檔案覆蓋 .setFileOverride(true) // 主鍵策略 .setIdType(IdType.AUTO) // 設定生成的service介面的名字的首字母是否為I,例如IEmployeeService .setServiceName("%sService") //生成基本的resultMap .setBaseResultMap(true) //生成基本的SQL片段 .setBaseColumnList(true) //生成後開啟資料夾 .setOpen(false).setDateType(DateType.ONLY_DATE); return config; } /** * 資料來源配置 * * @return */ private static DataSourceConfig configDataSource() { DataSourceConfig dsConfig = new DataSourceConfig(); // 設定資料庫型別 dsConfig.setDbType(DbType.MYSQL) .setDriverName("com.mysql.cj.jdbc.Driver") .setUrl("jdbc:mysql://localhost:3306/mybatis?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&serverTimezone=GMT%2B8") .setUsername("root") .setPassword("root") .setTypeConvert(new MySqlTypeConvert() { // 自定義資料庫表字段型別轉換【可選】 @Override public IColumnType processTypeConvert(GlobalConfig globalConfig, String fieldType) { System.out.println("轉換型別:" + fieldType); if (fieldType.toLowerCase().contains("tinyint")) { return DbColumnType.INTEGER; } return super.processTypeConvert(globalConfig, fieldType); } }); return dsConfig; } /** * 策略配置 * * @return */ private static StrategyConfig configStrategyConfig() { StrategyConfig stConfig = new StrategyConfig(); List<TableFill> tableFillList = new ArrayList<TableFill>(); //如 每張表都有一個建立時間、修改時間 //而且這基本上就是通用的了,新增時,建立時間和修改時間同時修改 //修改時,修改時間會修改, //雖然像Mysql資料庫有自動更新幾隻,但像ORACLE的資料庫就沒有了, //使用公共欄位填充功能,就可以實現,自動按場景更新了。 //如下是配置 TableFill sysCreateTime = new TableFill("create_time", FieldFill.INSERT); TableFill sysUpdateTime = new TableFill("update_time", FieldFill.UPDATE); TableFill sysCreateBy = new TableFill("create_by", FieldFill.INSERT); TableFill sysUpdateBy = new TableFill("update_by", FieldFill.UPDATE); tableFillList.add(sysCreateTime); tableFillList.add(sysUpdateTime); tableFillList.add(sysCreateBy); tableFillList.add(sysUpdateBy); // 全域性大寫命名 stConfig.setCapitalMode(true) // 指定表名 欄位名是否使用下劃線 //.setDbColumnUnderline(true) // 資料庫表對映到實體的命名策略 .setNaming(NamingStrategy.underline_to_camel) //.setTablePrefix("tbl_") // 生成的表 .setInclude(new String[]{ "pms_brand" }) .setEntityBooleanColumnRemoveIsPrefix(false) // 自定義實體,公共欄位 .setTableFillList(tableFillList); return stConfig; } /** * 包名策略配置 * @return */ private static PackageConfig configPackageConfig() { PackageConfig pkConfig = new PackageConfig(); pkConfig.setParent("com.example.test5.pms") //dao .setMapper("dao") //service .setService("service") //controller .setController("controller") .setEntity("entity") //mapper.xml .setXml("mapper"); return pkConfig; } }
模板
#foreach($field in $!{table.fields}) #if($!{field.name}!=$!{cfg.tenantColumn}) { label: "$!{field.comment}", prop: "$!{field.propertyName}", rules: [{ required: true, message: "請輸入$!{field.comment}", trigger: "blur" }] }, #end #end
.