spring-boot-mybatis-plus-layui 自定义代码生成完整多对一

1.代码生成器:自定义包名、自定义类名、自定义生成哪些包、自定义mapper.xml生成位置;

2.逻辑删除;

3.多对一:多表+分页+动态条件;

4.较完善的注释。

代码在码云上:https://gitee.com/xfyuao/surprise.git

工具、技术版本:jdk 8.18、eclipse 2019-6、maven 3.3.9、spring boot 2.3.0、mybatis plus 3.3.1、lombok 1.18.12、mysql 5.5.61、layui 2.5.4

如果你的项目中使用了layui的tree组件,请把layui升级到最新版(2.5.6),2.5.4树组件有bug。时间:2020.5.30

 

生成器代码如下:

  1 package com.xfyuao.util;
  2 
  3 import java.util.ArrayList;
  4 import java.util.List;
  5 
  6 import com.baomidou.mybatisplus.annotation.DbType;
  7 import com.baomidou.mybatisplus.core.toolkit.StringPool;
  8 import com.baomidou.mybatisplus.generator.AutoGenerator;
  9 import com.baomidou.mybatisplus.generator.InjectionConfig;
 10 import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
 11 import com.baomidou.mybatisplus.generator.config.FileOutConfig;
 12 import com.baomidou.mybatisplus.generator.config.GlobalConfig;
 13 import com.baomidou.mybatisplus.generator.config.PackageConfig;
 14 import com.baomidou.mybatisplus.generator.config.StrategyConfig;
 15 import com.baomidou.mybatisplus.generator.config.TemplateConfig;
 16 import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert;
 17 import com.baomidou.mybatisplus.generator.config.po.TableInfo;
 18 import com.baomidou.mybatisplus.generator.config.rules.DbColumnType;
 19 import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
 20 import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
 21 
 22 // mybatis plus 根据表生成entity、mapper、mapper.xml、service、service.impl、controller
 23 public class CodeGenerator {
 24 
 25     private static String url = "jdbc:mysql://localhost:3306/mp?serverTimezone=GMT%2B8";
 26     private static String username = "root";
 27     private static String password = "admin";
 28     private static String dirverName = "com.mysql.jdbc.Driver";
 29     private static String author = "xfyuao";// 作者
 30     private static String parent = "com.xfyuao";// 包前缀
 31     private static String[] tableArray = { "stu" };// 需要生成代码的表
 32     // 需要生成的包的名字,不需要生成以空字符或null代替
 33     private static String entity = "templates/entity.java";
 34     private static String mapper = "templates/mapper.java";
 35     private static String service = "templates/service.java";
 36     private static String serviceImpl = "templates/serviceImpl.java";
 37     //controller层包名已经在90行修改为web,但模板不变
 38     private static String controller = "templates/controller.java";
 39 
 40     public static void main(String[] args) {
 41 
 42         AutoGenerator mpg = new AutoGenerator();
 43         // 选择 freemarker 引擎,默认 Velocity
 44         mpg.setTemplateEngine(new FreemarkerTemplateEngine());
 45 
 46         // 全局配置
 47         GlobalConfig gc = new GlobalConfig();
 48         gc.setAuthor(author);
 49         gc.setFileOverride(true);// 覆盖同名文件
 50         gc.setOpen(false);// 不要打开生成后的目录
 51         String projectPath = System.getProperty("user.dir");// 获取项目根目录
 52         gc.setOutputDir(projectPath + "/src/main/java");// 设置代码生成的目录
 53         gc.setBaseResultMap(true);// mapper.xml中生成resultMap,默认false
 54         /* 自定义文件命名,注意 %s 会自动填充表实体属性! */
 55         gc.setServiceName("%sService");// 默认生成的service接口会以I开头
 56         // gc.setActiveRecord(false);//ActiveRecord模式,默认false,实体类会继承Model<T>,可以使用实体类crud
 57         // gc.setSwagger2(true);//开启 swagger2 模式 默认false
 58         // gc.setIdType(IdType.AUTO);//主键生成策略 默认自动
 59         // gc.setEnableCache(false);// mapper.xml 二级缓存,默认false
 60         mpg.setGlobalConfig(gc);
 61 
 62         // 数据源配置
 63         DataSourceConfig dsc = new DataSourceConfig();
 64         dsc.setDbType(DbType.MYSQL);//设置数据库类型
 65         /*dsc.setTypeConvert(new MySqlTypeConvert() {
 66             @Override
 67             public DbColumnType processTypeConvert(GlobalConfig globalConfig, String fieldType) {
 68                 System.out.println("转换类型:" + fieldType);
 69                 //tinyint转换成Boolean
 70                 if (fieldType.toLowerCase().contains("tinyint")) {
 71                     return DbColumnType.BOOLEAN;
 72                 }
 73                 //将数据库中datetime转换成date
 74                 if (fieldType.toLowerCase().contains("datetime")) {
 75                     return DbColumnType.DATE;
 76                 }
 77                 return (DbColumnType) super.processTypeConvert(globalConfig, fieldType);
 78             }
 79         
 80         });*/
 81         dsc.setUrl(url);
 82         dsc.setUsername(username);
 83         dsc.setPassword(password);
 84         dsc.setDriverName(dirverName);
 85         
 86         mpg.setDataSource(dsc);
 87 
 88         // 策略配置
 89         StrategyConfig strategy = new StrategyConfig();
 90         // strategy.setCapitalMode(true);// 全局大写命名 ORACLE 注意
 91         // strategy.setTablePrefix(new String[]{""});// 表前缀
 92         strategy.setNaming(NamingStrategy.underline_to_camel);// 表名生成策略,下划线转驼峰
 93         strategy.setColumnNaming(NamingStrategy.underline_to_camel);// 列名下划线转驼峰
 94         strategy.setInclude(tableArray); // 需要生成的表
 95         // strategy.setExclude(new String[]{"test"}); // 排除生成的表
 96         strategy.setEntityLombokModel(true);// 实体类使用lombok
 97         strategy.setRestControllerStyle(true); // 生成 @RestController 控制器
 98         strategy.setLogicDeleteFieldName("is_delete"); // 逻辑删除属性名称
 99 
100         // strategy.setSuperEntityClass("com.baomidou.ant.common.BaseEntity");// 自定义实体父类
101         // strategy.setSuperEntityColumns(new String[] { "test_id", "age"});//自定义实体,公共字段
102         // strategy.setSuperMapperClass("com.baomidou.mybatisplus.core.mapper.BaseMapper");//自定义mapper父类
103         // strategy.setSuperServiceClass("com.baomidou.mybatisplus.extension.service.IService");//自定义service父类
104         // strategy.setSuperServiceImplClass("com.baomidou.mybatisplus.extension.service.impl.ServiceImpl");//自定义service实现类父类
105         // strategy.setSuperControllerClass("com.baomidou.ant.common.BaseController");//自定义Controller父类
106         // 【实体】是否生成字段常量(默认 false)
107         // public static final String ID = "test_id";
108         // strategy.setEntityColumnConstant(true);
109         // 【实体】是否为构建者模型(默认 false)
110         // public User setName(String name) {this.name = name; return this;}
111         // strategy.setEntityBuilderModel(true);
112         mpg.setStrategy(strategy);
113 
114         // 包配置
115         PackageConfig pc = new PackageConfig();
116         pc.setParent(parent);
117         pc.setController("web");// controller改成web
118         mpg.setPackageInfo(pc);
119 
120         // 注入自定义配置,可以在 VM 中使用 cfg.abc 【可无】
121         InjectionConfig cfg = new InjectionConfig() {
122             @Override
123             public void initMap() {
124             }
125         };
126         // 如果模板引擎是 freemarker
127         String templatePath = "/templates/mapper.xml.ftl";
128         List<FileOutConfig> focList = new ArrayList<>();
129         // 调整 xml 生成目录,默认在mapper.xml包下
130         focList.add(new FileOutConfig(templatePath) {
131             @Override
132             public String outputFile(TableInfo tableInfo) {
133                 // 自定义输出文件名 , 如果你 Entity 设置了前后缀、此处注意 xml 的名称会跟着发生变化!!
134                 return projectPath + "/src/main/resources/mapper/" + tableInfo.getEntityName() + "Mapper"
135                         + StringPool.DOT_XML;
136             }
137         });
138         cfg.setFileOutConfigList(focList);
139         mpg.setCfg(cfg);
140         TemplateConfig tc = new TemplateConfig();
141         // 关闭默认 xml 生成,已经在src/main/resources/mapper下生成
142         tc.setXml(null);
143         tc.setEntity(entity);
144         tc.setMapper(mapper);
145         tc.setService(service);
146         tc.setServiceImpl(serviceImpl);
147         tc.setController(controller);
148         mpg.setTemplate(tc);
149 
150         // 执行生成
151         mpg.execute();
152 
153     }
154 }

 

posted @ 2020-05-29 18:49  xfyuao  阅读(910)  评论(0)    收藏  举报