| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219 |
- package com.coffee.codegen;
- import com.baomidou.mybatisplus.annotation.FieldFill;
- import com.baomidou.mybatisplus.core.toolkit.StringPool;
- 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.DateType;
- import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
- import com.baomidou.mybatisplus.generator.engine.VelocityTemplateEngine;
- import com.coffee.common.util.IdUtil;
- import com.google.common.collect.Maps;
- import java.util.*;
- /**
- * 代码生成工具类
- * @author Kevin
- */
- @SuppressWarnings("ALL")
- public class CodeGenerator {
- public static final String JDBC_URL = "jdbc:mysql://localhost:3306/coffee-dev?characterEncoding=utf8&useSSL=false&allowMultiQueries=true&serverTimezone=Asia/Shanghai";
- public static final String JDBC_USERNAME = "root";
- public static final String JDBC_PASSWORD = "123456";
- public static final String JDBC_DRIVER = "com.mysql.cj.jdbc.Driver";
- /** 按照个人需要,进行修改 */
- public static final String AUTHOR = "Kevin";
- public static final String PROJECT_PATH = "D:\\tempCode";
- public static final String PACKAGE_PARENT = "com.coffee";
- public static final String MODULE_NAME = "system";
- /** 生成SQL脚本的上级菜单的ID,要开发的功能,需要放到XXX菜单下面,请找到XXX菜单的ID */
- public static final String PARENT_MENU_ID = "1406064334403878913";
- /** admin的ID,可以不用修改 */
- public static final String CREATE_BY = "1";
- public static final String UPDATE_BY = "1";
- /** 默认菜单图标,可以不用修改,SQL脚本生成之后,在页面选择图标,进行修改即可 */
- public static final String ICON = "ant-design:unordered-list-outlined";
- // 是否导出excel
- public static final Boolean exportExcel = false;
- public static void main(String[] args) {
- new CodeGenerator().generate(
- "sys_example"
- );
- }
- private void generate(String... tableNamesInclude) {
- // 代码生成器
- AutoGenerator mpg = new AutoGenerator();
- // 全局配置
- GlobalConfig gc = new GlobalConfig();
- String projectPath = PROJECT_PATH;
- gc.setOutputDir(projectPath + "/src/main/java");
- gc.setAuthor(AUTHOR);
- gc.setOpen(false);
- gc.setDateType(DateType.ONLY_DATE);
- //默认不覆盖,如果文件存在,将不会再生成,配置true就是覆盖
- gc.setFileOverride(true);
- // gc.setSwagger2(true); 实体属性 Swagger2 注解
- gc.setBaseResultMap(true);
- // gc.setBaseColumnList(true); // XML column list
- mpg.setGlobalConfig(gc);
- // 数据源配置
- DataSourceConfig dsc = new DataSourceConfig();
- dsc.setUrl(JDBC_URL);
- dsc.setDriverName(JDBC_DRIVER);
- dsc.setUsername(JDBC_USERNAME);
- dsc.setPassword(JDBC_PASSWORD);
- mpg.setDataSource(dsc);
- // 包配置
- PackageConfig pc = new PackageConfig();
- // 设置模块名,会在指定parent包下生成一个指定的模块包
- pc.setModuleName(MODULE_NAME);
- pc.setParent(PACKAGE_PARENT);
- mpg.setPackageInfo(pc);
- // 自定义配置
- InjectionConfig cfg = new InjectionConfig() {
- @Override
- public void initMap() {
- // to do nothing
- Arrays.asList(tableNamesInclude).forEach(item -> {
- Map params = Objects.isNull(this.getMap()) ? Maps.newHashMap() : this.getMap();
- params.put(item +"menuId", IdUtil.getSnowflakeId());
- params.put(item +"parentMenuId", PARENT_MENU_ID);
- params.put(item +"icon", ICON);
- params.put(item +"pageButtonId", IdUtil.getSnowflakeId());
- params.put(item +"addButtonId", IdUtil.getSnowflakeId());
- params.put(item +"editButtonId", IdUtil.getSnowflakeId());
- params.put(item +"removeButtonId", IdUtil.getSnowflakeId());
- params.put(item +"viewButtonId", IdUtil.getSnowflakeId());
- params.put(item +"exportButtonId", IdUtil.getSnowflakeId());
- params.put(item +"createBy", CREATE_BY);
- params.put(item +"updateBy", UPDATE_BY);
- params.put(item +"exportExcel", exportExcel);
- this.setMap(params);
- });
- }
- };
- // 如果模板引擎是 freemarker
- // String templatePath = "/templates/mapper.xml.ftl";
- // 如果模板引擎是 velocity
- // String templatePath = "/templates/mapper.xml.vm";
- // 自定义输出配置
- List<FileOutConfig> focList = new ArrayList<>();
- // 自定义配置会被优先输出
- // 调整xml生成目录
- focList.add(new FileOutConfig("/templates/mapper.xml.vm") {
- @Override
- public String outputFile(TableInfo tableInfo) {
- return projectPath + "/src/main/resources/mapper/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;
- }
- });
- // 生成自定义模板
- focList.add(new FileOutConfig("/templates/addDTO.java.vm") {
- @Override
- public String outputFile(TableInfo tableInfo) {
- String path = PACKAGE_PARENT.replaceAll("\\." , "/") + "/" + MODULE_NAME.replaceAll("\\." , "/");
- return projectPath + "/src/main/java/" + path + "/common/dto/" + tableInfo.getEntityName() + "AddDTO" + StringPool.DOT_JAVA;
- }
- });
- // 生成自定义模板
- focList.add(new FileOutConfig("/templates/editDTO.java.vm") {
- @Override
- public String outputFile(TableInfo tableInfo) {
- String path = PACKAGE_PARENT.replaceAll("\\." , "/") + "/" + MODULE_NAME.replaceAll("\\." , "/");
- return projectPath + "/src/main/java/" + path + "/common/dto/" + tableInfo.getEntityName() + "EditDTO" + StringPool.DOT_JAVA;
- }
- });
- // 生成自定义模板
- focList.add(new FileOutConfig("/templates/queryDTO.java.vm") {
- @Override
- public String outputFile(TableInfo tableInfo) {
- String path = PACKAGE_PARENT.replaceAll("\\." , "/") + "/" + MODULE_NAME.replaceAll("\\." , "/");
- return projectPath + "/src/main/java/" + path + "/common/dto/" + tableInfo.getEntityName() + "QueryDTO" + StringPool.DOT_JAVA;
- }
- });
- // 生成自定义模板,SQL
- focList.add(new FileOutConfig("/templates/sql.vm") {
- @Override
- public String outputFile(TableInfo tableInfo) {
- return projectPath + "/" + tableInfo.getName() + "_sql.sql";
- }
- });
- // 生成自定义模板,VUE
- focList.add(new FileOutConfig("/templates/vue/api.ts.vm") {
- @Override
- public String outputFile(TableInfo tableInfo) {
- return projectPath + "/vue/" + tableInfo.getEntityPath() +"/" + tableInfo.getEntityPath() + "Api.ts";
- }
- });
- // 生成自定义模板,VUE
- focList.add(new FileOutConfig("/templates/vue/data.ts.vm") {
- @Override
- public String outputFile(TableInfo tableInfo) {
- return projectPath + "/vue/" + tableInfo.getEntityPath() +"/" + "data.ts";
- }
- });
- // 生成自定义模板,VUE
- focList.add(new FileOutConfig("/templates/vue/FormModal.vue.vm") {
- @Override
- public String outputFile(TableInfo tableInfo) {
- return projectPath + "/vue/" + tableInfo.getEntityPath() +"/" + "FormModal.vue";
- }
- });
- // 生成自定义模板,VUE
- focList.add(new FileOutConfig("/templates/vue/index.vue.vm") {
- @Override
- public String outputFile(TableInfo tableInfo) {
- return projectPath + "/vue/" + tableInfo.getEntityPath() +"/" + "index.vue";
- }
- });
- cfg.setFileOutConfigList(focList);
- mpg.setCfg(cfg);
- // 配置模板
- TemplateConfig templateConfig = new TemplateConfig();
- templateConfig.setXml(null)
- .setEntity("/templates/entity.java.vm")
- .setMapper("/templates/mapper.java.vm")
- .setController("/templates/controller.java.vm")
- .setService("/templates/service.java.vm")
- .setServiceImpl("/templates/serviceImpl.java.vm");
- mpg.setTemplate(templateConfig);
- // 策略配置
- StrategyConfig strategy = new StrategyConfig();
- strategy.setNaming(NamingStrategy.underline_to_camel);
- strategy.setColumnNaming(NamingStrategy.underline_to_camel);
- strategy.setEntityLombokModel(true);
- strategy.setRestControllerStyle(true);
- strategy.setInclude(tableNamesInclude);
- strategy.setChainModel(false);
- List<TableFill> tableFillList = new ArrayList<>();
- tableFillList.add(new TableFill("create_by" , FieldFill.INSERT));
- tableFillList.add(new TableFill("create_time" , FieldFill.INSERT));
- tableFillList.add(new TableFill("update_by" , FieldFill.INSERT_UPDATE));
- tableFillList.add(new TableFill("update_time" , FieldFill.INSERT_UPDATE));
- strategy.setTableFillList(tableFillList);
- mpg.setStrategy(strategy);
- mpg.setTemplateEngine(new VelocityTemplateEngine());
- mpg.execute();
- System.out.println(mpg.getTemplateEngine().getObjectMap(new TableInfo()));
- }
- }
|