package com.shanjupay.generator;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;
import com.baomidou.mybatisplus.core.toolkit.StringPool;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
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.TableInfo;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
/**
* <p>
* MyBatis Plus Generator 配置执行类示例
* </p>
*
* @author
* @since
*/
public class MyBatisPlusGenerator {
private static final Boolean IS_DTO = true;
/**
* <p>
* 读取控制台内容
* </p>
*/
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.isNotEmpty(ipt)) {
return ipt;
}
}
throw new MybatisPlusException("请输入正确的" + tip + "!");
}
public static void main(String[] args) {
// 代码生成器
AutoGenerator autoGenerator = new AutoGenerator();
// 全局配置
GlobalConfig globalConfig = new GlobalConfig();
String projectPath = System.getProperty("user.dir");
//当前项目名
String projectName = "/generator";
globalConfig.setOutputDir(projectPath + projectName+"/src/main/java");
globalConfig.setAuthor("author");
globalConfig.setOpen(false);
globalConfig.setIdType(IdType.ID_WORKER);
autoGenerator.setGlobalConfig(globalConfig);
// 数据源配置 需配置
DataSourceConfig dataSourceConfig = new DataSourceConfig();
// 商户服务
dataSourceConfig
.setUrl("jdbc:mysql://192.168.2.100:3306/smt_db?serverTimezone=Asia/Shanghai&useSSL=false&useUnicode=true&characterEncoding=utf8&autoReconnect=true&failOverReadOnly=false&userAffectedRows=true");
// dataSourceConfig.setSchemaName("public");
dataSourceConfig.setDriverName("com.mysql.cj.jdbc.Driver");
dataSourceConfig.setUsername("root");
dataSourceConfig.setPassword("ll775522");
autoGenerator.setDataSource(dataSourceConfig);
// 生成包配置
PackageConfig packageConfig = new PackageConfig();
packageConfig.setParent("com.smt");
//如果需要手动输入模块名
packageConfig.setModuleName(scanner("模块名"));
autoGenerator.setPackageInfo(packageConfig);
// 自定义配置
InjectionConfig injectionConfig = new InjectionConfig() {
@Override
public void initMap() {
// to do nothing
}
};
// 如果模板引擎是 freemarker
String templatePath = "/templates/mapper.xml.ftl";
// 自定义输出配置
List<FileOutConfig> focList = new ArrayList<>();
// 自定义配置会被优先输出
focList.add(new FileOutConfig(templatePath) {
@Override
public String outputFile(TableInfo tableInfo) {
// 自定义输出文件名
return projectPath + projectName+"/src/main/resources/mapper/" + packageConfig.getModuleName()
+ "/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;
}
});
injectionConfig.setFileOutConfigList(focList);
autoGenerator.setCfg(injectionConfig);
// 配置模板
TemplateConfig templateConfig = new TemplateConfig();
// 配置自定义输出模板
//指定自定义模板路径,注意不要带上.ftl/.vm, 会根据使用的模板引擎自动识别
// templateConfig.setEntity("templates/entity-test.java");
// templateConfig.setService("templates/service.java");
// templateConfig.setController("templates/controller.java");
templateConfig.setXml(null);
autoGenerator.setTemplate(templateConfig);
// 策略配置
StrategyConfig strategyConfig = new StrategyConfig();
strategyConfig.setNaming(NamingStrategy.underline_to_camel);//表名映射到实体策略,带下划线的转成驼峰
strategyConfig.setColumnNaming(NamingStrategy.underline_to_camel);//列名映射到类型属性策略,带下划线的转成驼峰
// strategyConfig.setSuperEntityClass("com.baomidou.ant.common.BaseEntity");
strategyConfig.setEntityLombokModel(true);//实体类使用lombok
// strategyConfig.setRestControllerStyle(true);
// strategyConfig.setSuperControllerClass("com.baomidou.ant.common.BaseController");
// 如果 setInclude() //设置表名不加参数, 会自动查找所有表
// 如需要制定单个表, 需填写参数如: strategyConfig.setInclude("user_info);
strategyConfig.setInclude();
// strategyConfig.setSuperEntityColumns("id");
// strategyConfig.setControllerMappingHyphenStyle(true);
//自动将数据库中表名为 user_info 格式的转为 UserInfo 命名
strategyConfig.setTablePrefix(packageConfig.getModuleName() + "_");//表名映射到实体名称去掉前缀
strategyConfig.setEntityBooleanColumnRemoveIsPrefix(true);// Boolean类型字段是否移除is前缀处理
autoGenerator.setStrategy(strategyConfig);
autoGenerator.setTemplateEngine(new FreemarkerTemplateEngine());
System.out.println("===================== MyBatis Plus Generator ==================");
//同时也生成dto
if (IS_DTO) {
globalConfig.setSwagger2(true);
globalConfig.setEntityName("%sDTO");
packageConfig.setEntity("dto");
}
autoGenerator.execute();
System.out.println("================= MyBatis Plus Generator Execute Complete ==================");
}
}