没有太多说的具体看代码注释,使用junit:
package com.guli.edu;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
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.po.TableFill;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import org.junit.Test;
import java.util.ArrayList;
public class CodeGenerator {
@Test
public void genCode() {
String moduleName = "edu";
// 1、创建代码生成器
AutoGenerator mpg = new AutoGenerator();
// 2、全局配置
GlobalConfig gc = new GlobalConfig();
String projectPath = System.getProperty("user.dir");
gc.setOutputDir(projectPath + "/src/main/java");//输出文件夹
gc.setAuthor("calmtho");//作者注释
gc.setOpen(false); //生成后是否打开资源管理器
gc.setFileOverride(true); //重新生成时文件是否覆盖
gc.setServiceName("%sService"); //去掉Service接口的首字母I
gc.setIdType(IdType.ID_WORKER_STR); //主键策略
gc.setDateType(DateType.ONLY_DATE);//定义生成的实体类中日期类型
gc.setSwagger2(true);//开启Swagger2模式
mpg.setGlobalConfig(gc);//配置全局配置到逆向工程构造构造器中
// 3、数据源配置
DataSourceConfig dsc = new DataSourceConfig();
dsc.setUrl("jdbc:mysql://localhost:3306/guli_" + moduleName);
dsc.setDriverName("com.mysql.jdbc.Driver");
dsc.setUsername("root");//你的数据库用户名
dsc.setPassword("root3306");//你的数据库密码
dsc.setDbType(DbType.MYSQL);//数据库类型
mpg.setDataSource(dsc);
// 4、包配置
PackageConfig pc = new PackageConfig();
pc.setModuleName(moduleName); //模块名
pc.setParent("com.guli");
pc.setController("controller");
pc.setEntity("entity");
pc.setService("service");
pc.setMapper("mapper");
mpg.setPackageInfo(pc);
// 5、策略配置
StrategyConfig strategy = new StrategyConfig();
strategy.setInclude(moduleName + "_\\w*");//设置要映射的表名
strategy.setNaming(NamingStrategy.underline_to_camel);//数据库表映射到实体的命名策略
strategy.setTablePrefix(pc.getModuleName() + "_");//设置表前缀不生成
strategy.setColumnNaming(NamingStrategy.underline_to_camel);//数据库表字段映射到实体的命名策略
strategy.setEntityLombokModel(true); // lombok 模型 @Accessors(chain = true) setter链式操作
strategy.setLogicDeleteFieldName("is_deleted");//逻辑删除字段名
strategy.setEntityBooleanColumnRemoveIsPrefix(true);//去掉布尔值的is_前缀
//自动填充
TableFill gmtCreate = new TableFill("gmt_create", FieldFill.INSERT);
TableFill gmtModified = new TableFill("gmt_modified", FieldFill.INSERT_UPDATE);
ArrayList<TableFill> tableFills = new ArrayList<>();
tableFills.add(gmtCreate);
tableFills.add(gmtModified);
strategy.setTableFillList(tableFills);
strategy.setVersionFieldName("version");//乐观锁列
strategy.setRestControllerStyle(true); //restful api风格控制器
strategy.setControllerMappingHyphenStyle(true); //url中驼峰转连字符
mpg.setStrategy(strategy);
// 6、执行
mpg.execute();
}
}
下面是构造器源码:
package com.baomidou.mybatisplus.generator;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.Version;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
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.builder.ConfigBuilder;
import com.baomidou.mybatisplus.generator.config.po.TableInfo;
import com.baomidou.mybatisplus.generator.engine.AbstractTemplateEngine;
import com.baomidou.mybatisplus.generator.engine.VelocityTemplateEngine;
import java.io.Serializable;
import java.util.Iterator;
import java.util.List;
import java.util.function.Consumer;
import java.util.function.Predicate;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class AutoGenerator {
private static final Logger logger = LoggerFactory.getLogger(AutoGenerator.class);
protected ConfigBuilder config;
protected InjectionConfig injectionConfig;
private DataSourceConfig dataSource;
private StrategyConfig strategy;
private PackageConfig packageInfo;
private TemplateConfig template;
private GlobalConfig globalConfig;
private AbstractTemplateEngine templateEngine;
public AutoGenerator() {
}
public void execute() {
logger.debug("==========================准备生成文件...==========================");
if (null == this.config) {
this.config = new ConfigBuilder(this.packageInfo, this.dataSource, this.strategy, this.template, this.globalConfig);
if (null != this.injectionConfig) {
this.injectionConfig.setConfig(this.config);
}
}
if (null == this.templateEngine) {
this.templateEngine = new VelocityTemplateEngine();
}
this.templateEngine.init(this.pretreatmentConfigBuilder(this.config)).mkdirs().batchOutput().open();
logger.debug("==========================文件生成完成!!!==========================");
}
protected List<TableInfo> getAllTableInfoList(ConfigBuilder config) {
return config.getTableInfoList();
}
protected ConfigBuilder pretreatmentConfigBuilder(ConfigBuilder config) {
if (null != this.injectionConfig) {
this.injectionConfig.initMap();
config.setInjectionConfig(this.injectionConfig);
}
List<TableInfo> tableList = this.getAllTableInfoList(config);
Iterator var3 = tableList.iterator();
while(var3.hasNext()) {
TableInfo tableInfo = (TableInfo)var3.next();
if (config.getGlobalConfig().isActiveRecord()) {
tableInfo.setImportPackages(Model.class.getCanonicalName());
}
if (tableInfo.isConvert()) {
tableInfo.setImportPackages(TableName.class.getCanonicalName());
}
if (config.getStrategyConfig().getLogicDeleteFieldName() != null && tableInfo.isLogicDelete(config.getStrategyConfig().getLogicDeleteFieldName())) {
tableInfo.setImportPackages(TableLogic.class.getCanonicalName());
}
if (StringUtils.isNotEmpty(config.getStrategyConfig().getVersionFieldName())) {
tableInfo.setImportPackages(Version.class.getCanonicalName());
}
if (StringUtils.isNotEmpty(config.getSuperEntityClass())) {
tableInfo.setImportPackages(config.getSuperEntityClass());
} else {
tableInfo.setImportPackages(Serializable.class.getCanonicalName());
}
if (config.getStrategyConfig().isEntityBooleanColumnRemoveIsPrefix()) {
tableInfo.getFields().stream().filter((field) -> {
return "boolean".equalsIgnoreCase(field.getPropertyType());
}).filter((field) -> {
return field.getPropertyName().startsWith("is");
}).forEach((field) -> {
field.setPropertyName(config.getStrategyConfig(), StringUtils.removePrefixAfterPrefixToLower(field.getPropertyName(), 2));
});
}
}
return config.setTableInfoList(tableList);
}
public DataSourceConfig getDataSource() {
return this.dataSource;
}
public AutoGenerator setDataSource(DataSourceConfig dataSource) {
this.dataSource = dataSource;
return this;
}
public StrategyConfig getStrategy() {
return this.strategy;
}
public AutoGenerator setStrategy(StrategyConfig strategy) {
this.strategy = strategy;
return this;
}
public PackageConfig getPackageInfo() {
return this.packageInfo;
}
public AutoGenerator setPackageInfo(PackageConfig packageInfo) {
this.packageInfo = packageInfo;
return this;
}
public TemplateConfig getTemplate() {
return this.template;
}
public AutoGenerator setTemplate(TemplateConfig template) {
this.template = template;
return this;
}
public ConfigBuilder getConfig() {
return this.config;
}
public AutoGenerator setConfig(ConfigBuilder config) {
this.config = config;
return this;
}
public GlobalConfig getGlobalConfig() {
return this.globalConfig;
}
public AutoGenerator setGlobalConfig(GlobalConfig globalConfig) {
this.globalConfig = globalConfig;
return this;
}
public InjectionConfig getCfg() {
return this.injectionConfig;
}
public AutoGenerator setCfg(InjectionConfig injectionConfig) {
this.injectionConfig = injectionConfig;
return this;
}
public AbstractTemplateEngine getTemplateEngine() {
return this.templateEngine;
}
public AutoGenerator setTemplateEngine(AbstractTemplateEngine templateEngine) {
this.templateEngine = templateEngine;
return this;
}
}
生成效果展示: