官⽹上对代码⽣成器的教程感觉读了⼀遍之后没啥体会,mybatis-plus中这⼀部分包含的内容确实挺多的,关于详细配置的部分看的有点云⼭雾绕。为了能够初步体验⼀下这⽅⾯的功能,先将代码从官⽹的基础教程中拷贝了下来,然后简单读了⼀下,发现貌似只要更改⼀下路径以及模板引擎什么的就可以把这个代码⽣成器⽤起来。但问题是我并不打算⽤模板引擎,在搜索了⼀波如何配置⽆模板引擎的⽣成器⽆果后,我摸索着注释掉了⼀部分代码。这就搞出事情了,开始是代码运⾏报错,⽆奈之下,将⼀部分注释的代码放开,这次还算⽐较顺利,但问题在于关于xml的部分完全没有⽣成。
最终在⼀番折腾后,发现那部分代码就在我最初注释的代码之中,为了避免下次忘记怎么⽤,故在此简单记录⼀下使⽤流程。⾸先,将官⽹上的模板拷贝下来。
修改其中⼀些路径及数据源等,使之与⾃⼰的项⽬相匹配。
引⼊⼀个模板引擎的依赖,不管你⽤不⽤这东西。(⽬前我没找到如何在不配置模板引擎的情况下,使⽤plus的代码⽣成器,如果你找到了,你可以不这么做。)
然后,基本上直接run就⾏了,如果想使⽤⼀些官⽹demo中没有的配置,可以查看官⽹中给出的详细配置。
package com.boot.demo.generator;import java.util.ArrayList;import java.util.List;
import java.util.Scanner;
import org.apache.commons.lang3.StringUtils;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;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.DataSourceConfig;import com.baomidou.mybatisplus.generator.config.FileOutConfig;import com.baomidou.mybatisplus.generator.config.GlobalConfig;import com.baomidou.mybatisplus.generator.config.PackageConfig;import com.baomidou.mybatisplus.generator.config.StrategyConfig;import com.baomidou.mybatisplus.generator.config.TemplateConfig;import com.baomidou.mybatisplus.generator.config.po.TableInfo;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;public class CodeGenerator { /** *
* 读取控制台内容 *
*/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.isNotBlank(ipt)) { return ipt; } }
throw new MybatisPlusException(\"请输⼊正确的\" + tip + \"!\"); }
public static void main(String[] args) { // 代码⽣成器
AutoGenerator mpg = new AutoGenerator(); // 全局配置
GlobalConfig gc = new GlobalConfig();
String projectPath = System.getProperty(\"user.dir\"); gc.setOutputDir(projectPath + \"/src/main/java\"); gc.setAuthor(\"戏谑\");
gc.setBaseResultMap(true); gc.setBaseColumnList(false); gc.setMapperName(\"%sMapper\"); gc.setXmlName(\"%sMapper\"); gc.setOpen(false);
// gc.setSwagger2(true); 实体属性 Swagger2 注解 mpg.setGlobalConfig(gc); // 数据源配置
DataSourceConfig dsc = new DataSourceConfig();
dsc.setUrl(\"jdbc:mysql://localhost:3306/shiro?serverTimezone=UTC\"); // dsc.setSchemaName(\"public\");
dsc.setDriverName(\"com.mysql.cj.jdbc.Driver\"); dsc.setUsername(\"root\"); dsc.setPassword(\"root\"); mpg.setDataSource(dsc);
// 包配置
PackageConfig pc = new PackageConfig(); pc.setModuleName(scanner(\"模块名\")); pc.setParent(\"com.boot.demo\"); mpg.setPackageInfo(pc);
// ⾃定义配置
InjectionConfig cfg = new InjectionConfig() { @Override
public void initMap() { // to do nothing } };
// 如果模板引擎是 freemarker
// String templatePath = \"/templates/mapper.xml.ftl\"; // 如果模板引擎是 velocity
String templatePath = \"/templates/mapper.xml.vm\";
// ⾃定义输出配置
List focList.add(new FileOutConfig(templatePath) { @Override public String outputFile(TableInfo tableInfo) { // ⾃定义输出⽂件名 , 如果你 Entity 设置了前后缀、此处注意 xml 的名称会跟着发⽣变化!! return projectPath + \"/src/main/resources/mapper/\" + pc.getModuleName() + \"/\" + tableInfo.getEntityName() + \"Mapper\" + StringPool.DOT_XML; } }); /* cfg.setFileCreate(new IFileCreate() { @Override public boolean isCreate(ConfigBuilder configBuilder, FileType fileType, String filePath) { // 判断⾃定义⽂件夹是否需要创建 checkDir(\"调⽤默认⽅法创建的⽬录,⾃定义⽬录⽤\"); if (fileType == FileType.MAPPER) { // 已经⽣成 mapper ⽂件判断存在,不想重新⽣成返回 false return !new File(filePath).exists(); } // 允许⽣成模板⽂件 return true; } }); */ cfg.setFileOutConfigList(focList); mpg.setCfg(cfg); // 配置模板 TemplateConfig templateConfig = new TemplateConfig(); // 配置⾃定义输出模板 //指定⾃定义模板路径,注意不要带上.ftl/.vm, 会根据使⽤的模板引擎⾃动识别 // templateConfig.setEntity(\"templates/entity2.java\"); // templateConfig.setService(); // templateConfig.setController(); templateConfig.setXml(null); mpg.setTemplate(templateConfig); // 策略配置 StrategyConfig strategy = new StrategyConfig(); strategy.setNaming(NamingStrategy.underline_to_camel); strategy.setColumnNaming(NamingStrategy.underline_to_camel); //strategy.setSuperEntityClass(\"你⾃⼰的⽗类实体,没有就不⽤设置!\"); strategy.setEntityLombokModel(true); strategy.setRestControllerStyle(true); // 公共⽗类 //strategy.setSuperControllerClass(\"你⾃⼰的⽗类控制器,没有就不⽤设置!\"); // 写于⽗类中的公共字段 strategy.setSuperEntityColumns(\"id\"); strategy.setInclude(scanner(\"表名,多个英⽂逗号分割\").split(\ strategy.setControllerMappingHyphenStyle(true); strategy.setTablePrefix(pc.getModuleName() + \"_\"); mpg.setStrategy(strategy); mpg.setTemplateEngine(null); mpg.execute(); }} 第⼀次⽤,代码⾥可能有⼀些没必要存在的东西,还有⼀点要注意,StringUtils需要额外导⼊⼀个依赖。 版本什么的最好仔细斟酌⼀下,别搞冲突了,最终会⽣成mvc三层代码以及实体类和管理sql的xml⽂件。然后应该是还需要在配置⽂件中配置⼀下: mybatis-plus: mapper-locations: classpath*:/mapper/**/*.xml 这是yml配置,写的时候注意格式,没测试,应该好⽤。 因篇幅问题不能全部显示,请点此查看更多更全内容