用於連接資料庫後根據模板生成文件
<dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus</artifactId> <version>3.0.6</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-freemarker</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.25</version> </dependency>
//tinyint轉換成Boolean if ( fieldType.toLowerCase().contains( "tinyint" ) ) { return DbColumnType.BOOLEAN; } //將資料庫中datetime轉換成date,防止出現自動生成代碼LocalDateTime if ( fieldType.toLowerCase().contains( "datetime" ) ) { return DbColumnType.DATE; }
List<FileOutConfig> focList = new ArrayList<>();// 自定義生成文件 focList.add(new FileOutConfig("/templates/entityForm.java.ftl") { @Override public String outputFile(TableInfo tableInfo) { // 自定義輸入文件名稱 \com\springboot\platform\entity\form\ return "D:\\spring\\mybatisplus\\src\\main\\java\\com\\peabody\\mybatisplus\\entity\\form\\" + tableInfo.getEntityName()+"Form" + StringPool.DOT_JAVA; } });
整體配置代碼如下:
package com.peabody.mybatisplus.generate;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.converts.MySqlTypeConvert;import com.baomidou.mybatisplus.generator.config.po.TableInfo;import com.baomidou.mybatisplus.generator.config.rules.DbColumnType;import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;import java.util.ArrayList;import java.util.List;import java.util.Scanner;public class mpgenerate { 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(); // 選擇 freemarker 引擎,默認 Veloctiy mpg.setTemplateEngine(new FreemarkerTemplateEngine()); // 配置模板 TemplateConfig templateConfig = new TemplateConfig(); templateConfig.setXml(null); mpg.setTemplate(templateConfig); // 全局配置 GlobalConfig gc = new GlobalConfig(); gc.setOutputDir("D:\\spring\\mybatisplus\\src\\main\\java"); //生成文件的輸出目錄 gc.setAuthor("peabody"); //作者 gc.setFileOverride(true); //是否覆蓋已有文件 默認值:false gc.setOpen(false); //是否打開輸出目錄 默認值:true gc.setSwagger2(true); //開啟 swagger2 模式 默認false gc.setBaseColumnList(true); //開啟 baseColumnList 默認false gc.setBaseResultMap(true); //開啟 BaseResultMap 默認false gc.setEntityName("%s"); //實體命名方式 默認值:null 例如:%sEntity 生成 UserEntity gc.setMapperName("%sMapper"); //mapper 命名方式 默認值:null 例如:%sDao 生成 UserDao //Mapper xml 命名方式 默認值:null 例如:%sDao 生成 UserDao.xml gc.setServiceName("I%sService"); //service 命名方式 默認值:null 例如:%sBusiness 生成 UserBusiness gc.setServiceImplName("%sService"); //service impl 命名方式 默認值:null 例如:%sBusinessImpl 生成 UserBusinessImpl gc.setControllerName("%sController"); //controller 命名方式 默認值:null 例如:%sAction 生成 UserAction mpg.setGlobalConfig(gc); // 數據源配置 DataSourceConfig dsc = new DataSourceConfig(); dsc.setDbType(DbType.MYSQL); //資料庫類型 該類內置了常用的資料庫類型【必須】 dsc.setUrl("jdbc:mysql://127.0.0.1:3306/peapeay?useUnicode=true&useSSL=false&characterEncoding=utf8"); // dsc.setSchemaName("public"); dsc.setDriverName("com.mysql.jdbc.Driver"); dsc.setUsername("root"); dsc.setPassword("peabody"); dsc.setTypeConvert(new MySqlTypeConvert() { @Override public DbColumnType processTypeConvert(GlobalConfig globalConfig, String fieldType) { System.out.println("轉換類型:" + fieldType); //tinyint轉換成Boolean if ( fieldType.toLowerCase().contains( "tinyint" ) ) { return DbColumnType.BOOLEAN; } //將資料庫中datetime轉換成date,防止出現自動生成代碼LocalDateTime if ( fieldType.toLowerCase().contains( "datetime" ) ) { return DbColumnType.DATE; } return (DbColumnType) super.processTypeConvert(globalConfig, fieldType); } }); mpg.setDataSource(dsc); // 包配置 PackageConfig pc = new PackageConfig();// pc.setModuleName(scanner("模塊名")); pc.setParent("com.peabody.mybatisplus"); pc.setEntity("entity.po"); pc.setMapper("dao"); pc.setController("rest"); pc.setService("service"); pc.setServiceImpl("service.impl"); mpg.setPackageInfo(pc); // 自定義配置gateway_ignore InjectionConfig cfg = new InjectionConfig() { @Override public void initMap() { //注入自定義 Map 對象 //自定義動作 } }; List<FileOutConfig> focList = new ArrayList<>();// 自定義生成文件 focList.add(new FileOutConfig("/templates/entityForm.java.ftl") { @Override public String outputFile(TableInfo tableInfo) { // 自定義輸入文件名稱 \com\springboot\platform\entity\form\ return "D:\\spring\\mybatisplus\\src\\main\\java\\com\\peabody\\mybatisplus\\entity\\form\\" + tableInfo.getEntityName()+"Form" + StringPool.DOT_JAVA; } }); cfg.setFileOutConfigList(focList); mpg.setCfg(cfg); mpg.setTemplate(new TemplateConfig().setXml(null)); // 策略配置 資料庫表配置,通過該配置,可指定需要生成哪些表或者排除哪些表 StrategyConfig strategy = new StrategyConfig(); strategy.setNaming(NamingStrategy.underline_to_camel); //表名生成策略 strategy.setColumnNaming(NamingStrategy.underline_to_camel);//資料庫表欄位映射到實體的命名策略, 未指定按照 naming 執行// strategy.setCapitalMode(true); // 全局大寫命名 ORACLE 注意// strategy.setTablePrefix("prefix"); //表前綴// strategy.setSuperEntityClass("com.baomidou.ant.common.BaseEntity"); //自定義繼承的Entity類全稱,帶包名// strategy.setSuperEntityColumns(new String[] { "test_id", "age" }); //自定義實體,公共欄位 strategy.setEntityLombokModel(true); //【實體】是否為lombok模型(默認 false strategy.setRestControllerStyle(true); //生成 @RestController 控制器// strategy.setSuperControllerClass("com.baomidou.ant.common.BaseController"); //自定義繼承的Controller類全稱,帶包名 strategy.setInclude(scanner("table_name")); //需要包含的表名,允許正則表達式(與exclude二選一配置)// strategy.setInclude(new String[] { "user" }); // 需要生成的表可以多張表// strategy.setExclude(new String[]{"test"}); // 排除生成的表 strategy.setControllerMappingHyphenStyle(true); //駝峰轉連字符 strategy.setTablePrefix(pc.getModuleName() + "_"); //是否生成實體時,生成欄位註解 mpg.setStrategy(strategy); mpg.setTemplateEngine(new FreemarkerTemplateEngine()); mpg.execute(); } }
歐克,起飛了
當然ftl可以自定義,不一定適配我的模板,輸入表格名稱後生成文件
執行結果
執行後生成的文件列表
生成文件
ftl模板可以去mybatisplus官網GitHub上下載,內容太多不在此貼出來了