package com.ycl;
|
|
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.setting.dialect.Props;
|
import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;
|
import com.baomidou.mybatisplus.generator.AutoGenerator;
|
import com.baomidou.mybatisplus.generator.config.*;
|
import com.baomidou.mybatisplus.generator.config.po.LikeTable;
|
import com.baomidou.mybatisplus.generator.config.querys.MySqlQuery;
|
import com.baomidou.mybatisplus.generator.config.rules.DateType;
|
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
|
import com.baomidou.mybatisplus.generator.engine.VelocityTemplateEngine;
|
|
import java.util.Collections;
|
import java.util.Scanner;
|
|
/**
|
* MyBatisPlus代码生成器
|
* Created by macro on 2020/8/20.
|
*/
|
public class MyBatisPlusGenerator {
|
|
public static void main(String[] args) {
|
String projectPath = System.getProperty("user.dir");
|
String moduleName = scanner("模块名");
|
String[] tableNames = scanner("表名,多个英文逗号分割").split(",");
|
// 代码生成器
|
AutoGenerator autoGenerator = new AutoGenerator(initDataSourceConfig());
|
autoGenerator.global(initGlobalConfig(projectPath));
|
autoGenerator.packageInfo(initPackageConfig(projectPath,moduleName));
|
autoGenerator.injection(initInjectionConfig(projectPath, moduleName));
|
autoGenerator.template(initTemplateConfig());
|
autoGenerator.strategy(initStrategyConfig(tableNames));
|
autoGenerator.execute(new VelocityTemplateEngine());
|
}
|
|
/**
|
* 读取控制台内容信息
|
*/
|
private static String scanner(String tip) {
|
Scanner scanner = new Scanner(System.in);
|
System.out.println(("请输入" + tip + ":"));
|
if (scanner.hasNext()) {
|
String next = scanner.next();
|
if (StrUtil.isNotEmpty(next)) {
|
return next;
|
}
|
}
|
throw new MybatisPlusException("请输入正确的" + tip + "!");
|
}
|
|
/**
|
* 初始化全局配置
|
*/
|
private static GlobalConfig initGlobalConfig(String projectPath) {
|
return new GlobalConfig.Builder()
|
.outputDir(projectPath + "/ycl-generator/src/main/java")
|
.author("lyq")
|
.disableOpenDir()
|
.enableSwagger()
|
.fileOverride()
|
.dateType(DateType.ONLY_DATE)
|
.build();
|
}
|
|
/**
|
* 初始化数据源配置
|
*/
|
private static DataSourceConfig initDataSourceConfig() {
|
Props props = new Props("generator.properties");
|
String url = props.getStr("dataSource.url");
|
String username = props.getStr("dataSource.username");
|
String password = props.getStr("dataSource.password");
|
return new DataSourceConfig.Builder(url,username,password)
|
.dbQuery(new MySqlQuery())
|
.build();
|
}
|
|
/**
|
* 初始化包配置
|
*/
|
private static PackageConfig initPackageConfig(String projectPath,String moduleName) {
|
Props props = new Props("generator.properties");
|
return new PackageConfig.Builder()
|
.moduleName(moduleName)
|
.parent(props.getStr("package.base"))
|
.entity("entity")
|
.pathInfo(Collections.singletonMap(OutputFile.mapperXml, projectPath + "/ycl-generator/src/main/resources/mapper/" + moduleName))
|
.build();
|
}
|
|
/**
|
* 初始化模板配置
|
*/
|
private static TemplateConfig initTemplateConfig() {
|
//可以对controller、service、entity模板进行配置
|
return new TemplateConfig.Builder().build();
|
}
|
|
/**
|
* 初始化策略配置
|
*/
|
private static StrategyConfig initStrategyConfig(String[] tableNames) {
|
StrategyConfig.Builder builder = new StrategyConfig.Builder();
|
builder.entityBuilder()
|
.naming(NamingStrategy.underline_to_camel)
|
.columnNaming(NamingStrategy.underline_to_camel)
|
.enableLombok()
|
.formatFileName("%s")
|
.mapperBuilder()
|
.enableBaseResultMap()
|
.formatMapperFileName("%sMapper")
|
.formatXmlFileName("%sMapper")
|
.serviceBuilder()
|
.formatServiceFileName("%sService")
|
.formatServiceImplFileName("%sServiceImpl")
|
.controllerBuilder()
|
.enableRestStyle()
|
.formatFileName("%sController");
|
//当表名中带*号时可以启用通配符模式
|
if (tableNames.length == 1 && tableNames[0].contains("*")) {
|
String[] likeStr = tableNames[0].split("_");
|
String likePrefix = likeStr[0] + "_";
|
builder.likeTable(new LikeTable(likePrefix));
|
} else {
|
builder.addInclude(tableNames);
|
}
|
return builder.build();
|
}
|
|
/**
|
* 初始化自定义配置
|
*/
|
private static InjectionConfig initInjectionConfig(String projectPath, String moduleName) {
|
// 自定义配置
|
return new InjectionConfig.Builder().build();
|
}
|
|
}
|