官网:
https://mp.baomidou.com/guide/generator.html
https://mp.baomidou.com/config/generator-config.html
1.添加依赖
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.2.0</version>
</dependency>
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.1</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.17</version>
</dependency>
2.生成类(其中数据源以及文件输出路径需要改成自己的)
package code;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
/**
*
* @author
* @date 2019/10/17
*/
public class CodeGenerator {
/**
* 数据源设置
*
* @return 数据源
*/
private static DataSourceConfig getDbSourceCfg() {
DataSourceConfig dsc = new DataSourceConfig();
String host = reader("数据源IP及端口号");
String database = reader("数据库名");
String dbUsername = reader("数据库用户名");
String dbPassword = reader("数据库密码");
dsc.setUrl("jdbc:mysql://" + host + "/" + database + "?useUnicode=true&useSSL=false&characterEncoding=utf8");
dsc.setDriverName("com.mysql.cj.jdbc.Driver");
dsc.setUsername(dbUsername);
dsc.setPassword(dbPassword);
return dsc;
}
private static StrategyConfig getStrategyCfg() {
StrategyConfig strategy = new StrategyConfig();
strategy.setNaming(NamingStrategy.underline_to_camel);
strategy.setColumnNaming(NamingStrategy.underline_to_camel);
String data = reader("表前缀", false);
if (data != null) {
strategy.setTablePrefix(data);
}
data = reader("字段前缀", false);
if (data != null) {
strategy.setFieldPrefix(data);
}
strategy.setSuperEntityClass(reader("自定义继承的Entity类全称,带包名", false));
if (strategy.getSuperEntityClass() != null) {
String reader = reader("自定义基础的Entity类,公共字段,多个字段以,间隔", false);
if (reader != null) {
strategy.setSuperEntityColumns(reader.split(","));
}
}
strategy.setSuperMapperClass(reader("自定义继承的Mapper类全称,带包名", false));
strategy.setSuperServiceClass(reader("自定义继承的Service类全称,带包名", false));
strategy.setSuperServiceImplClass(reader("自定义继承的ServiceImpl类全称,带包名", false));
strategy.setSuperControllerClass(reader("自定义继承的Controller类全称,带包名", false));
boolean includeFlag = readerBoolean("是否需要输入 需要包含的表名,允许正则表达式(与exclude二选一配置)");
if (includeFlag) {
String include = reader("需要包含的表名,允许正则表达式,多个表名以,间隔", false);
if (include != null) {
strategy.setInclude(include.split(","));
}
} else {
String exclude = reader("需要排除的表名,允许正则表达式,多个表名以,间隔", false);
if (exclude != null) {
strategy.setExclude(exclude.split(","));
}
}
strategy.setEntityColumnConstant(readerBoolean("【实体】是否生成字段常量"));
strategy.setEntityBuilderModel(readerBoolean("【实体】是否为构建者模型"));
strategy.setEntityLombokModel(readerBoolean("【实体】是否为lombok模型"));
strategy.setRestControllerStyle(readerBoolean("是否生成 @RestController 控制器"));
strategy.setControllerMappingHyphenStyle(true);
return strategy;
}
private static PackageConfig getPackageCfg() {
PackageConfig pc = new PackageConfig();
pc.setParent(reader("父包名,如果为空,将下面子包名必须写全部,否则就只需写子包名", false));
pc.setEntity(reader("entity包名"));
pc.setService(reader("service包名"));
pc.setServiceImpl(reader("serviceImpl包名"));
pc.setMapper(reader("mapper包名"));
pc.setXml(reader("xml文件夹名"));
pc.setController(reader("controller包名"));
return pc;
}
private static GlobalConfig getGlobalCfg() {
GlobalConfig gc = new GlobalConfig();
String rootPath = reader("本项目(项目下为多模块时,应当是模块)根路径");
String path = rootPath + "/src/main/java";
boolean b = readerBoolean("输出路径: " + path + " ,是否正确,正确继续,否则终止");
if (!b) {
System.exit(0);
}
gc.setOutputDir(path);
// 不打开输出目录
gc.setOpen(false);
gc.setAuthor(reader("作者名"));
gc.setMapperName("%sMapper");
gc.setXmlName("%sMapper");
gc.setServiceName("%sService");
gc.setServiceImplName("%sServiceImpl");
gc.setControllerName("%sController");
gc.setIdType(IdType.ID_WORKER);
return gc;
}
private static void init() {
// 代码生成器
AutoGenerator mpg = new AutoGenerator();
// 全局配置
mpg.setGlobalConfig(getGlobalCfg());
mpg.setDataSource(getDbSourceCfg());
// 包配置
PackageConfig pc = getPackageCfg();
mpg.setPackageInfo(pc);
// 策略配置
mpg.setStrategy(getStrategyCfg());
TemplateConfig templateConfig = new TemplateConfig();
templateConfig.setXml(null);
mpg.setTemplate(templateConfig);
mpg.execute();
}
public static void main(String[] args) {
// 手动输入
//init();
new InnerGenerator().generateCode();
}
private static BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
/**
* 获取输入,需要判空
*
* @param tip 内容提示
* @return 结果
*/
private static String reader(String tip) {
return reader(tip, true);
}
private static boolean readerBoolean(String tip) {
tip = tip.concat(", 1/true为true,其它字符串均为false");
String reader = reader(tip, true);
if ("1".equals(reader)) {
return true;
}
return "true".equalsIgnoreCase(reader);
}
private static String reader(String tip, boolean checkEmpty) {
String msg = "请输入".concat(tip);
if (!checkEmpty) {
msg = msg.concat(", 回车为空且结束输入");
}
try {
while (true) {
System.err.println(msg);
String line = reader.readLine();
if (checkEmpty) {
if (StringUtils.isEmpty(line)) {
msg = "输入有误,请重新输入".concat(tip);
continue;
}
}
if ("".equals(line)) {
line = null;
}
return line;
}
} catch (IOException e) {
e.printStackTrace();
System.exit(0);
}
return "";
}
private static class InnerGenerator {
private void generateCode() {
GlobalConfig gc = new GlobalConfig();
String rootPath = System.getProperty("user.dir");
String path = rootPath + "/src/main/java";
gc.setOutputDir(path);
gc.setOpen(false);
gc.setAuthor("lw");
gc.setMapperName("%sMapper");
gc.setXmlName("%sMapper");
gc.setServiceName("%sService");
gc.setServiceImplName("%sServiceImpl");
gc.setControllerName("%sController");
gc.setIdType(IdType.ID_WORKER);
DataSourceConfig dsc = new DataSourceConfig();
dsc.setUrl("jdbc:mysql://localhost:3306/security_demo?useUnicode=true&useSSL=false&characterEncoding=utf8");
dsc.setDriverName("com.mysql.cj.jdbc.Driver");
dsc.setUsername("root");
dsc.setPassword("root");
PackageConfig pc = new PackageConfig();
pc.setParent("com.example.security");
pc.setEntity("entity");
pc.setService("service");
pc.setServiceImpl("service.impl");
pc.setMapper("mapper");
pc.setXml("mappers");
pc.setController("controller");
StrategyConfig strategy = new StrategyConfig();
strategy.setNaming(NamingStrategy.underline_to_camel);
strategy.setColumnNaming(NamingStrategy.underline_to_camel);
strategy.setTablePrefix((String[]) null);
strategy.setFieldPrefix((String[]) null);
strategy.setSuperEntityClass((String) null);
strategy.setSuperEntityColumns((String[]) null);
strategy.setSuperMapperClass(null);
strategy.setSuperServiceClass(null);
strategy.setSuperServiceImplClass(null);
strategy.setSuperControllerClass(null);
strategy.setExclude((String[]) null);
strategy.setEntityColumnConstant(true);
strategy.setEntityBuilderModel(true);
strategy.setEntityLombokModel(true);
strategy.setEntityTableFieldAnnotationEnable(true);
strategy.setRestControllerStyle(true);
strategy.setControllerMappingHyphenStyle(true);
TemplateConfig templateConfig = new TemplateConfig();
AutoGenerator ag = new AutoGenerator();
ag.setGlobalConfig(gc);
ag.setDataSource(dsc);
ag.setPackageInfo(pc);
ag.setStrategy(strategy);
ag.setTemplate(templateConfig);
ag.execute();
}
}
}