CodeGenerator.java 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219
  1. package com.coffee.codegen;
  2. import com.baomidou.mybatisplus.annotation.FieldFill;
  3. import com.baomidou.mybatisplus.core.toolkit.StringPool;
  4. import com.baomidou.mybatisplus.generator.AutoGenerator;
  5. import com.baomidou.mybatisplus.generator.InjectionConfig;
  6. import com.baomidou.mybatisplus.generator.config.*;
  7. import com.baomidou.mybatisplus.generator.config.po.TableFill;
  8. import com.baomidou.mybatisplus.generator.config.po.TableInfo;
  9. import com.baomidou.mybatisplus.generator.config.rules.DateType;
  10. import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
  11. import com.baomidou.mybatisplus.generator.engine.VelocityTemplateEngine;
  12. import com.coffee.common.util.IdUtil;
  13. import com.google.common.collect.Maps;
  14. import java.util.*;
  15. /**
  16. * 代码生成工具类
  17. * @author Kevin
  18. */
  19. @SuppressWarnings("ALL")
  20. public class CodeGenerator {
  21. public static final String JDBC_URL = "jdbc:mysql://localhost:3306/coffee-dev?characterEncoding=utf8&useSSL=false&allowMultiQueries=true&serverTimezone=Asia/Shanghai";
  22. public static final String JDBC_USERNAME = "root";
  23. public static final String JDBC_PASSWORD = "123456";
  24. public static final String JDBC_DRIVER = "com.mysql.cj.jdbc.Driver";
  25. /** 按照个人需要,进行修改 */
  26. public static final String AUTHOR = "Kevin";
  27. public static final String PROJECT_PATH = "D:\\tempCode";
  28. public static final String PACKAGE_PARENT = "com.coffee";
  29. public static final String MODULE_NAME = "system";
  30. /** 生成SQL脚本的上级菜单的ID,要开发的功能,需要放到XXX菜单下面,请找到XXX菜单的ID */
  31. public static final String PARENT_MENU_ID = "1406064334403878913";
  32. /** admin的ID,可以不用修改 */
  33. public static final String CREATE_BY = "1";
  34. public static final String UPDATE_BY = "1";
  35. /** 默认菜单图标,可以不用修改,SQL脚本生成之后,在页面选择图标,进行修改即可 */
  36. public static final String ICON = "ant-design:unordered-list-outlined";
  37. // 是否导出excel
  38. public static final Boolean exportExcel = false;
  39. public static void main(String[] args) {
  40. new CodeGenerator().generate(
  41. "sys_example"
  42. );
  43. }
  44. private void generate(String... tableNamesInclude) {
  45. // 代码生成器
  46. AutoGenerator mpg = new AutoGenerator();
  47. // 全局配置
  48. GlobalConfig gc = new GlobalConfig();
  49. String projectPath = PROJECT_PATH;
  50. gc.setOutputDir(projectPath + "/src/main/java");
  51. gc.setAuthor(AUTHOR);
  52. gc.setOpen(false);
  53. gc.setDateType(DateType.ONLY_DATE);
  54. //默认不覆盖,如果文件存在,将不会再生成,配置true就是覆盖
  55. gc.setFileOverride(true);
  56. // gc.setSwagger2(true); 实体属性 Swagger2 注解
  57. gc.setBaseResultMap(true);
  58. // gc.setBaseColumnList(true); // XML column list
  59. mpg.setGlobalConfig(gc);
  60. // 数据源配置
  61. DataSourceConfig dsc = new DataSourceConfig();
  62. dsc.setUrl(JDBC_URL);
  63. dsc.setDriverName(JDBC_DRIVER);
  64. dsc.setUsername(JDBC_USERNAME);
  65. dsc.setPassword(JDBC_PASSWORD);
  66. mpg.setDataSource(dsc);
  67. // 包配置
  68. PackageConfig pc = new PackageConfig();
  69. // 设置模块名,会在指定parent包下生成一个指定的模块包
  70. pc.setModuleName(MODULE_NAME);
  71. pc.setParent(PACKAGE_PARENT);
  72. mpg.setPackageInfo(pc);
  73. // 自定义配置
  74. InjectionConfig cfg = new InjectionConfig() {
  75. @Override
  76. public void initMap() {
  77. // to do nothing
  78. Arrays.asList(tableNamesInclude).forEach(item -> {
  79. Map params = Objects.isNull(this.getMap()) ? Maps.newHashMap() : this.getMap();
  80. params.put(item +"menuId", IdUtil.getSnowflakeId());
  81. params.put(item +"parentMenuId", PARENT_MENU_ID);
  82. params.put(item +"icon", ICON);
  83. params.put(item +"pageButtonId", IdUtil.getSnowflakeId());
  84. params.put(item +"addButtonId", IdUtil.getSnowflakeId());
  85. params.put(item +"editButtonId", IdUtil.getSnowflakeId());
  86. params.put(item +"removeButtonId", IdUtil.getSnowflakeId());
  87. params.put(item +"viewButtonId", IdUtil.getSnowflakeId());
  88. params.put(item +"exportButtonId", IdUtil.getSnowflakeId());
  89. params.put(item +"createBy", CREATE_BY);
  90. params.put(item +"updateBy", UPDATE_BY);
  91. params.put(item +"exportExcel", exportExcel);
  92. this.setMap(params);
  93. });
  94. }
  95. };
  96. // 如果模板引擎是 freemarker
  97. // String templatePath = "/templates/mapper.xml.ftl";
  98. // 如果模板引擎是 velocity
  99. // String templatePath = "/templates/mapper.xml.vm";
  100. // 自定义输出配置
  101. List<FileOutConfig> focList = new ArrayList<>();
  102. // 自定义配置会被优先输出
  103. // 调整xml生成目录
  104. focList.add(new FileOutConfig("/templates/mapper.xml.vm") {
  105. @Override
  106. public String outputFile(TableInfo tableInfo) {
  107. return projectPath + "/src/main/resources/mapper/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;
  108. }
  109. });
  110. // 生成自定义模板
  111. focList.add(new FileOutConfig("/templates/addDTO.java.vm") {
  112. @Override
  113. public String outputFile(TableInfo tableInfo) {
  114. String path = PACKAGE_PARENT.replaceAll("\\." , "/") + "/" + MODULE_NAME.replaceAll("\\." , "/");
  115. return projectPath + "/src/main/java/" + path + "/common/dto/" + tableInfo.getEntityName() + "AddDTO" + StringPool.DOT_JAVA;
  116. }
  117. });
  118. // 生成自定义模板
  119. focList.add(new FileOutConfig("/templates/editDTO.java.vm") {
  120. @Override
  121. public String outputFile(TableInfo tableInfo) {
  122. String path = PACKAGE_PARENT.replaceAll("\\." , "/") + "/" + MODULE_NAME.replaceAll("\\." , "/");
  123. return projectPath + "/src/main/java/" + path + "/common/dto/" + tableInfo.getEntityName() + "EditDTO" + StringPool.DOT_JAVA;
  124. }
  125. });
  126. // 生成自定义模板
  127. focList.add(new FileOutConfig("/templates/queryDTO.java.vm") {
  128. @Override
  129. public String outputFile(TableInfo tableInfo) {
  130. String path = PACKAGE_PARENT.replaceAll("\\." , "/") + "/" + MODULE_NAME.replaceAll("\\." , "/");
  131. return projectPath + "/src/main/java/" + path + "/common/dto/" + tableInfo.getEntityName() + "QueryDTO" + StringPool.DOT_JAVA;
  132. }
  133. });
  134. // 生成自定义模板,SQL
  135. focList.add(new FileOutConfig("/templates/sql.vm") {
  136. @Override
  137. public String outputFile(TableInfo tableInfo) {
  138. return projectPath + "/" + tableInfo.getName() + "_sql.sql";
  139. }
  140. });
  141. // 生成自定义模板,VUE
  142. focList.add(new FileOutConfig("/templates/vue/api.ts.vm") {
  143. @Override
  144. public String outputFile(TableInfo tableInfo) {
  145. return projectPath + "/vue/" + tableInfo.getEntityPath() +"/" + tableInfo.getEntityPath() + "Api.ts";
  146. }
  147. });
  148. // 生成自定义模板,VUE
  149. focList.add(new FileOutConfig("/templates/vue/data.ts.vm") {
  150. @Override
  151. public String outputFile(TableInfo tableInfo) {
  152. return projectPath + "/vue/" + tableInfo.getEntityPath() +"/" + "data.ts";
  153. }
  154. });
  155. // 生成自定义模板,VUE
  156. focList.add(new FileOutConfig("/templates/vue/FormModal.vue.vm") {
  157. @Override
  158. public String outputFile(TableInfo tableInfo) {
  159. return projectPath + "/vue/" + tableInfo.getEntityPath() +"/" + "FormModal.vue";
  160. }
  161. });
  162. // 生成自定义模板,VUE
  163. focList.add(new FileOutConfig("/templates/vue/index.vue.vm") {
  164. @Override
  165. public String outputFile(TableInfo tableInfo) {
  166. return projectPath + "/vue/" + tableInfo.getEntityPath() +"/" + "index.vue";
  167. }
  168. });
  169. cfg.setFileOutConfigList(focList);
  170. mpg.setCfg(cfg);
  171. // 配置模板
  172. TemplateConfig templateConfig = new TemplateConfig();
  173. templateConfig.setXml(null)
  174. .setEntity("/templates/entity.java.vm")
  175. .setMapper("/templates/mapper.java.vm")
  176. .setController("/templates/controller.java.vm")
  177. .setService("/templates/service.java.vm")
  178. .setServiceImpl("/templates/serviceImpl.java.vm");
  179. mpg.setTemplate(templateConfig);
  180. // 策略配置
  181. StrategyConfig strategy = new StrategyConfig();
  182. strategy.setNaming(NamingStrategy.underline_to_camel);
  183. strategy.setColumnNaming(NamingStrategy.underline_to_camel);
  184. strategy.setEntityLombokModel(true);
  185. strategy.setRestControllerStyle(true);
  186. strategy.setInclude(tableNamesInclude);
  187. strategy.setChainModel(false);
  188. List<TableFill> tableFillList = new ArrayList<>();
  189. tableFillList.add(new TableFill("create_by" , FieldFill.INSERT));
  190. tableFillList.add(new TableFill("create_time" , FieldFill.INSERT));
  191. tableFillList.add(new TableFill("update_by" , FieldFill.INSERT_UPDATE));
  192. tableFillList.add(new TableFill("update_time" , FieldFill.INSERT_UPDATE));
  193. strategy.setTableFillList(tableFillList);
  194. mpg.setStrategy(strategy);
  195. mpg.setTemplateEngine(new VelocityTemplateEngine());
  196. mpg.execute();
  197. System.out.println(mpg.getTemplateEngine().getObjectMap(new TableInfo()));
  198. }
  199. }