Mybatis-Plus代码生成器,详解
背景
最近又接了一个新项目,项目从0开始。经过架构设计、表设计、架构搭建,进入了代码编写阶段。为减轻大家的基础工作量,决定使用Mybatis-Plus的自定义模板生成code功能,来完成简单表的crud编写。
本文的价值
- 介绍Mybatis-Plus代码生成器的使用。
- 使用Mybatis-Plus代码生成器的一些注意事项。
进入正文
Mybatis-Plus代码生成器可以做什么
【官网介绍】AutoGenerator 是 MyBatis-Plus 的代码生成器,通过 AutoGenerator 可以快速生成 Entity、Mapper、Mapper XML、Service、Controller 等各个模块的代码,极大的提升了开发效率。
【本文】详细解读官网的配置
上代码解读
本文通过对官网代码进行整理,并加入了部分内容。
代码生成器
生成器组成
生成器包括,全局配置、数据源配置、 包路径配置、配置模板、策略配置、自定义模板配置组成,最后execute来执行。
public static void main(String[] args) {
//全局配置
GlobalConfig gc = getGlobalConfig();
//数据源配置
DataSourceConfig dsc = getDataSourceConfig();
//包配置
PackageConfig pc = getPackageConfig();
//配置模板
TemplateConfig templateConfig = getTemplateConfig();
//策略配置
StrategyConfig strategy = getStrategyConfig();
// 自定义配置
InjectionConfig cfg = getInjectionConfig();
new AutoGenerator().setGlobalConfig(gc)
.setDataSource(dsc)
.setPackageInfo(pc)
.setStrategy(strategy)
.setTemplate(templateConfig)
// 选择 freemarker 引擎需要指定如下加,注意 pom 依赖必须有!
.setTemplateEngine(new FreemarkerTemplateEngine())
.setCfg(cfg)
.execute();
}
全局配置-GlobalConfig
private static GlobalConfig getGlobalConfig() {
// 全局配置
GlobalConfig gc = new GlobalConfig();
//设置文件作者author
gc.setAuthor(AUTHOR);
//打开文件
gc.setOpen(true);
String projectPath = System.getProperty("user.dir");
//设置文件生成后,open弹窗的路径
gc.setOutputDir(projectPath);
//文件覆盖
gc.setFileOverride(true);
//是否重写model的pkVal方法
gc.setActiveRecord(true);
// XML 二级缓存
gc.setEnableCache(false);
// XML ResultMap 生成查询的映射结果
gc.setBaseResultMap(true);
// XML columList 生成查询的结果列
gc.setBaseColumnList(false);
// 设置swagger注解 ,这个要把swagger的依赖添加好,否则可先置为false
gc.setSwagger2(true);
return gc;
}
数据源配置-DataSourceConfig
数据源配置,【注意】如果是PostgreSql数据库,建议设置schemaName,否则默认为public。
private static DataSourceConfig getDataSourceConfig() {
DataSourceConfig dsc = new DataSourceConfig();
dsc.setDbType(DB_TYPE);
dsc.setUrl(DB_URL);
dsc.setDriverName(DB_DRIVER_CLASS_NAME);
dsc.setUsername(DB_USER_NAME);
dsc.setPassword(DB_PASSWORD);
//【重要】如果是postgreSql必须要指定schemaName,否则默认为public。
return dsc;
}
包路径配置-PackageConfig
设置的包配置,为生成文件中,package的路径,需要是形如:xxx.xxx.xxx,这种用 . 来连接的路径,这里设置要根据项目结构来灵活配置。
private static PackageConfig getPackageConfig() {
String entity = DAO_OUTPUT_MODULE + ENTITY_PATH;
String mapper = DAO_OUTPUT_MODULE + MAPPER_PATH;
String xml = DAO_OUTPUT_MODULE + XML_PATH;
String service = SERVICE_OUTPUT_MODULE + SERVICE_PATH;
String serviceImpl = SERVICE_OUTPUT_MODULE + SERVICE_IMPL_PATH;
String controller = CONTROLLER_OUTPUT_MODULE + CONTROLLER_PATH;
return new PackageConfig()
// 地址需要解析成,形如xxx.xxx.xxx.xxx这种点.连接形式
.setParent(PARENT_PACKAGE_PATH.replace('/', '.').substring(1))
.setEntity(getPointLinkString(entity))
.setMapper(getPointLinkString(mapper))
.setXml(getPointLinkString(xml))
.setService(getPointLinkString(service))
.setServiceImpl(getPointLinkString(serviceImpl))
.setController(getPointLinkString(controller));
}
private static String getPointLinkString(String slashLinkString){
//将所有/转为.然后,将首字符删除
return slashLinkString.replace('/', '.').substring(1, slashLinkString.length()-1);
}
配置模板-TemplateConfig
自定义模板配置,可以 copy 源码 mybatis-plus/src/main/resources/templates 下面内容修改,放置自己项目的 src/main/resources/templates 目录下, 默认名称一下可以不配置,也可以自定义模板名称,只要放到目录下,名字不变,就会采用这个模版。
private static TemplateConfig getTemplateConfig() {
TemplateConfig templateConfig = new TemplateConfig();
//配置自定义输出模板
// 不需要其他的类型时,直接设置为null就不会成对应的模版了
templateConfig.setEntity(null);
templateConfig.setService(null);
templateConfig.setController(null);
templateConfig.setServiceImpl(null);
templateConfig.setXml(null);
// 自定义模板配置,可以 copy 源码 mybatis-plus/src/main/resources/templates 下面内容修改,
// 放置自己项目的 src/main/resources/templates 目录下, 默认名称一下可以不配置,也
// 可以自定义模板名称 只要放到目录下,名字不变 就会采用这个模版 下面这句有没有无所谓
// 模版去github上看地址:
/**https://github.com/baomidou/mybatis-plus/tree/3.0/mybatis-plus-generator/src/main/resources/templates*/
// templateConfig.setEntity("/templates/entity.java");
return templateConfig;
}
策略配置-StrategyConfig
生成文件与数据库、架构依赖等等方面的一些自定配置,如:驼峰命名、swagger注解、自动填充、去除表前缀、lombook注解等等,详见以下代码:
private static StrategyConfig getStrategyConfig() {
// 策略配置
StrategyConfig strategy = new StrategyConfig();
//驼峰命名
strategy.setNaming(NamingStrategy.underline_to_camel);
strategy.setColumnNaming(NamingStrategy.underline_to_camel);
//需要添加lombok依赖
strategy.setEntityLombokModel(true);
//去除表前缀
strategy.setTablePrefix(ENTITY_IGNORE_PREFIX);
// TODO 指定生成的bean的数据库表名
// strategy.setInclude(scanner("表名,多个英文逗号分割").split(","));
strategy.setInclude(TABLES);
//strategy.setSuperEntityColumns("id");
// 驼峰转连接字符
strategy.setControllerMappingHyphenStyle(true);
//生成实体类字段注解(会在entity实体属性上加@TableField)
strategy.setEntityTableFieldAnnotationEnable(true);
// 自定义需要填充的字段
List<TableFill> tableFillList = getTableFills();
strategy.setTableFillList(tableFillList);
// 设置逻辑删除键和version字段
strategy.setLogicDeleteFieldName(DB_DEL_FLAG);
strategy.setVersionFieldName(DB_VERSION);
return strategy;
}
private static List<TableFill> getTableFills() {
List<TableFill> tableFillList = new ArrayList<>();
//每张表建议都有创建时间,创建人,修改人,修改时间,逻辑删除,版本这几个属性。
//使用自动填充功能,就可以实现,按场景填充属性,具体问题具体分析,非选。
//如下是配置(可选)
TableFill createTime = new TableFill(DB_CREATE_TIME, FieldFill.INSERT);
TableFill createUser = new TableFill(DB_CREATE_USER, FieldFill.INSERT);
TableFill updateTime = new TableFill(DB_UPDATE_TIME, FieldFill.INSERT_UPDATE);
TableFill updateUser = new TableFill(DB_UPDATE_USER, FieldFill.INSERT_UPDATE);
TableFill version = new TableFill(DB_VERSION, FieldFill.INSERT);
TableFill delFlag = new TableFill(DB_DEL_FLAG, FieldFill.INSERT);
tableFillList.add(createTime);
tableFillList.add(createUser);
tableFillList.add(updateTime);
tableFillList.add(updateUser);
tableFillList.add(version);
tableFillList.add(delFlag);
return tableFillList;
}
自定义模板配置-InjectionConfig
自定义输出文件的模板地址、覆盖策略、命名、路径等,详见如下代码:
private static InjectionConfig getInjectionConfig() {
InjectionConfig cfg = new InjectionConfig() {
@Override
public void initMap() {
// to do nothing
}
};
//--有以下代码则会选择性覆盖之前产生的文件,这个看场景决定---start----
cfg.setFileCreate(new IFileCreate() {
@Override
public boolean isCreate(ConfigBuilder configBuilder, FileType fileType, String filePath) {
// 检查文件目录,不存在自动递归创建
checkDir(filePath);
// 指定需要覆盖的文件
// 文件结尾名字参照 全局配置 中对各层文件的命名,未修改为默认值
return !isExists(filePath) || (filePath.endsWith("Mapper.xml") || filePath.endsWith("Dao.java") || filePath.endsWith("Mapper.java"));
}
});
//--有以上代码则会选择性覆盖之前产生的文件---end----
List<FileOutConfig> focList = getFileOutConfigs();
cfg.setFileOutConfigList(focList);
return cfg;
}
/**
* 判断文件是否存在
* @param path 路径
* @return 文件是否创建
*/
private static boolean isExists(String path) {
File file = new File(path);
return file.exists();
}
private static List<FileOutConfig> getFileOutConfigs() {
String projectPath = System.getProperty("user.dir");
//【注意】会检测模板,如果重复则不会重复生成,可能直接跳过
List<FileOutConfig> focList = new ArrayList<>();
// 实体类文件输出
focList.add(new FileOutConfig(ENTITY_TEMPLATE) {
@Override
public String outputFile(TableInfo tableInfo) {
return projectPath + ENTITY_OUTPUT_PATH +tableInfo.getEntityName() + StringPool.DOT_JAVA;
}
});
// mapper xml文件输出
focList.add(new FileOutConfig(XML_TEMPLATE) {
@Override
public String outputFile(TableInfo tableInfo) {
return projectPath + XML_OUTPUT_PATH + tableInfo.getMapperName() + StringPool.DOT_XML;
}
});
// mapper文件输出
focList.add(new FileOutConfig(MAPPER_TEMPLATE) {
@Override
public String outputFile(TableInfo tableInfo) {
return projectPath + MAPPER_OUTPUT_PATH + tableInfo.getMapperName() + StringPool.DOT_JAVA;
}
});
// service文件输出
focList.add(new FileOutConfig(SERVICE_TEMPLATE) {
@Override
public String outputFile(TableInfo tableInfo) {
return projectPath + SERVICE_OUTPUT_PATH + tableInfo.getServiceName() + StringPool.DOT_JAVA;
}
});
// service impl文件输出
focList.add(new FileOutConfig(SERVICE_IMPL_TEMPLATE) {
@Override
public String outputFile(TableInfo tableInfo) {
return projectPath + SERVICE_IMPL_OUTPUT_PATH + tableInfo.getServiceImplName() + StringPool.DOT_JAVA;
}
});
// controller文件输出
focList.add(new FileOutConfig(CONTROLLER_TEMPLATE) {
@Override
public String outputFile(TableInfo tableInfo) {
return projectPath + CONTROLLER_OUTPUT_PATH + tableInfo.getControllerName() + StringPool.DOT_JAVA;
}
});
//生成扩展的模板和实体
getFileOutConfigsExpand(focList);
return focList;
}
完整代码及pom依赖
pom依赖:mybatis-plus+freemarker
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.4.2</version>
</dependency>
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.31</version>
</dependency>
以下是完整代码,请大家参考使用:
package com.xxxx.utils;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.annotation.FieldFill;
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.IFileCreate;
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.TableFill;
import com.baomidou.mybatisplus.generator.config.po.TableInfo;
import com.baomidou.mybatisplus.generator.config.rules.FileType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import org.apache.commons.lang3.StringUtils;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
/**
* mybatis的代码生成器
* @author 木木归来
* @since 2021-02-11 20:34
**/
public class MysqlGenerator {
/** 作者姓名,生成在文件作者栏目 */
private static final String AUTHOR = "木木归来";
/** 生成的实体类忽略表前缀: 不需要则置空;如表为prefix_user_info,需要去掉prefix,则此处配置为prefix或prefix_均可 */
private static final String ENTITY_IGNORE_PREFIX = "";
/** 需要进行自动生成的表名,也可以通过scanner来控制台输入 */
private static final String[] TABLES = {
"表名",
};
// 看情况,生成文件输出的路径,是否要区分模块,若没有则置空
/** Entity.java, Mapper.java, Mapper.xml输出模块路径 */
private static final String DAO_OUTPUT_MODULE = "";
/** mapper.xml输出模块路径([注意]放置的位置:默认从模块/src/main下开始) */
private static final String XML_OUTPUT_MODULE = "";
/** IService.java, serviceImpl.java输出模块路径 */
private static final String SERVICE_OUTPUT_MODULE = "";
/** Controller.java输出模块路径 */
private static final String CONTROLLER_OUTPUT_MODULE = "";
/** 父包名路径(文件输出路径,也是导包的路径,package路径) */
private static final String PARENT_PACKAGE_PATH = "/com/xxx/generator";
/** 各层包名 */
private static final String ENTITY_PATH = "/domain/entity/";
private static final String MAPPER_PATH = "/mapper/";
private static final String XML_PATH = "/resource/generator/mapper/";
private static final String SERVICE_PATH = "/service/";
private static final String SERVICE_IMPL_PATH = "/service/impl/";
private static final String CONTROLLER_PATH = "/controller/";
/** 数据库 */
private static final String DB_USER_NAME = "root";
private static final String DB_PASSWORD = "root";
private static final String DB_URL = "jdbc:mysql://localhost:3306/xxx?useUnicode=true&useSSL=false" +
"&characterEncoding=utf8&serverTimezone=UTC";
private static final DbType DB_TYPE = DbType.MYSQL;
private static final String DB_DRIVER_CLASS_NAME = "com.mysql.cj.jdbc.Driver";
private static final String DB_CREATE_TIME="create_time";
private static final String DB_CREATE_USER="create_user";
private static final String DB_UPDATE_TIME="update_time";
private static final String DB_UPDATE_USER="update_user";
private static final String DB_VERSION="version";
private static final String DB_DEL_FLAG="is_deleted";
// 自定义输出模板和位置
// 文件位置输出模式: file output path = projectPath + XX_OUTPUT_PATH + File
// XX_OUTPUT_PATH = modulePath + packagePath
/** entity输出模板 */
private static final String ENTITY_TEMPLATE = "templates/entity.java.ftl";
private static final String ENTITY_OUTPUT_PATH = DAO_OUTPUT_MODULE + "/src/main/java" + PARENT_PACKAGE_PATH + DAO_OUTPUT_MODULE + ENTITY_PATH;
/** mapper.xml输出模板 */
private static final String XML_TEMPLATE = "templates/mapper.xml.ftl";
private static final String XML_OUTPUT_PATH = DAO_OUTPUT_MODULE + "/src/main" + XML_OUTPUT_MODULE + XML_PATH;
/** mapper.java输出模板 */
private static final String MAPPER_TEMPLATE = "templates/mapper.java.ftl";
private static final String MAPPER_OUTPUT_PATH = DAO_OUTPUT_MODULE + "/src/main/java" + PARENT_PACKAGE_PATH + DAO_OUTPUT_MODULE + MAPPER_PATH;
/** service输出模板 */
private static final String SERVICE_TEMPLATE = "templates/service.java.ftl";
private static final String SERVICE_OUTPUT_PATH = SERVICE_OUTPUT_MODULE + "/src/main/java" + PARENT_PACKAGE_PATH + SERVICE_OUTPUT_MODULE + SERVICE_PATH;
/** serviceImpl输出模板 */
private static final String SERVICE_IMPL_TEMPLATE = "templates/serviceImpl.java.ftl";
private static final String SERVICE_IMPL_OUTPUT_PATH = SERVICE_OUTPUT_MODULE + "/src/main/java" + PARENT_PACKAGE_PATH + SERVICE_OUTPUT_MODULE + SERVICE_IMPL_PATH;
/** controller输出模板 */
private static final String CONTROLLER_TEMPLATE = "templates/controller.java.ftl";
private static final String CONTROLLER_OUTPUT_PATH =
CONTROLLER_OUTPUT_MODULE + "/src/main/java" + PARENT_PACKAGE_PATH + CONTROLLER_OUTPUT_MODULE + CONTROLLER_PATH;
/**
* RUN THIS 官方文档地址:https://mp.baomidou.com/guide/generator.html
*/
public static void main(String[] args) {
//全局配置
GlobalConfig gc = getGlobalConfig();
//数据源配置
DataSourceConfig dsc = getDataSourceConfig();
//包配置
PackageConfig pc = getPackageConfig();
//配置模板
TemplateConfig templateConfig = getTemplateConfig();
//策略配置
StrategyConfig strategy = getStrategyConfig();
// 自定义配置
InjectionConfig cfg = getInjectionConfig();
new AutoGenerator().setGlobalConfig(gc)
.setDataSource(dsc)
.setPackageInfo(pc)
.setStrategy(strategy)
.setTemplate(templateConfig)
// 选择 freemarker 引擎需要指定如下加,注意 pom 依赖必须有!
.setTemplateEngine(new FreemarkerTemplateEngine())
.setCfg(cfg)
.execute();
}
private static InjectionConfig getInjectionConfig() {
InjectionConfig cfg = new InjectionConfig() {
@Override
public void initMap() {
// to do nothing
}
};
//--有以下代码则不会覆盖之前产生的文件,这个看场景决定---start----
// cfg.setFileCreate(new IFileCreate() {
// @Override
// public boolean isCreate(ConfigBuilder configBuilder, FileType fileType, String filePath) {
// // 检查文件目录,不存在自动递归创建
// checkDir(filePath);
// // 指定需要覆盖的文件
// // 文件结尾名字参照 全局配置 中对各层文件的命名,未修改为默认值
// return !isExists(filePath) || (filePath.endsWith("Mapper.xml") || filePath.endsWith("Dao.java") || filePath.endsWith("Mapper.java"));
// }
// });
//--有以上代码则不会覆盖之前产生的文件---end----
List<FileOutConfig> focList = getFileOutConfigs();
cfg.setFileOutConfigList(focList);
return cfg;
}
/**
* 判断文件是否存在
* @param path 路径
* @return 文件是否创建
*/
private static boolean isExists(String path) {
File file = new File(path);
return file.exists();
}
private static List<FileOutConfig> getFileOutConfigs() {
String projectPath = System.getProperty("user.dir");
List<FileOutConfig> focList = new ArrayList<>();
// 实体类文件输出
focList.add(new FileOutConfig(ENTITY_TEMPLATE) {
@Override
public String outputFile(TableInfo tableInfo) {
return projectPath + ENTITY_OUTPUT_PATH + tableInfo.getEntityName() + StringPool.DOT_JAVA;
}
});
// mapper xml文件输出
focList.add(new FileOutConfig(XML_TEMPLATE) {
@Override
public String outputFile(TableInfo tableInfo) {
return projectPath + XML_OUTPUT_PATH + tableInfo.getMapperName() + StringPool.DOT_XML;
}
});
// mapper文件输出
focList.add(new FileOutConfig(MAPPER_TEMPLATE) {
@Override
public String outputFile(TableInfo tableInfo) {
return projectPath + MAPPER_OUTPUT_PATH + tableInfo.getMapperName() + StringPool.DOT_JAVA;
}
});
// service文件输出
focList.add(new FileOutConfig(SERVICE_TEMPLATE) {
@Override
public String outputFile(TableInfo tableInfo) {
return projectPath + SERVICE_OUTPUT_PATH + tableInfo.getServiceName() + StringPool.DOT_JAVA;
}
});
// service impl文件输出
focList.add(new FileOutConfig(SERVICE_IMPL_TEMPLATE) {
@Override
public String outputFile(TableInfo tableInfo) {
return projectPath + SERVICE_IMPL_OUTPUT_PATH + tableInfo.getServiceImplName() + StringPool.DOT_JAVA;
}
});
// controller文件输出
focList.add(new FileOutConfig(CONTROLLER_TEMPLATE) {
@Override
public String outputFile(TableInfo tableInfo) {
return projectPath + CONTROLLER_OUTPUT_PATH + tableInfo.getControllerName() + StringPool.DOT_JAVA;
}
});
return focList;
}
private static StrategyConfig getStrategyConfig() {
// 策略配置
StrategyConfig strategy = new StrategyConfig();
//驼峰命名
strategy.setNaming(NamingStrategy.underline_to_camel);
strategy.setColumnNaming(NamingStrategy.underline_to_camel);
//需要添加lombok依赖
strategy.setEntityLombokModel(true);
//去除表前缀
strategy.setTablePrefix(ENTITY_IGNORE_PREFIX);
// TODO 指定生成的bean的数据库表名
// strategy.setInclude(scanner("表名,多个英文逗号分割").split(","));
strategy.setInclude(TABLES);
//strategy.setSuperEntityColumns("id");
// 驼峰转连接字符
strategy.setControllerMappingHyphenStyle(true);
//生成实体类字段注解(会在entity实体属性上加@TableField)
//strategy.setEntityTableFieldAnnotationEnable(true);
// 自定义需要填充的字段
List<TableFill> tableFillList = getTableFills();
strategy.setTableFillList(tableFillList);
// 设置逻辑删除键和version字段
strategy.setLogicDeleteFieldName(DB_DEL_FLAG);
strategy.setVersionFieldName(DB_VERSION);
return strategy;
}
private static List<TableFill> getTableFills() {
List<TableFill> tableFillList = new ArrayList<>();
//每张表建议都有创建时间,创建人,修改人,修改时间,逻辑删除,版本这几个属性。
//使用自动填充功能,就可以实现,按场景填充属性,具体问题具体分析,非选。
//如下是配置(可选)
TableFill createTime = new TableFill(DB_CREATE_TIME, FieldFill.INSERT);
TableFill createUser = new TableFill(DB_CREATE_USER, FieldFill.INSERT);
TableFill updateTime = new TableFill(DB_UPDATE_TIME, FieldFill.INSERT_UPDATE);
TableFill updateUser = new TableFill(DB_UPDATE_USER, FieldFill.INSERT_UPDATE);
TableFill version = new TableFill(DB_VERSION, FieldFill.INSERT);
TableFill delFlag = new TableFill(DB_DEL_FLAG, FieldFill.INSERT);
tableFillList.add(createTime);
tableFillList.add(createUser);
tableFillList.add(updateTime);
tableFillList.add(updateUser);
tableFillList.add(version);
tableFillList.add(delFlag);
return tableFillList;
}
private static TemplateConfig getTemplateConfig() {
TemplateConfig templateConfig = new TemplateConfig();
//配置自定义输出模板
// 不需要其他的类型时,直接设置为null就不会成对应的模版了
templateConfig.setEntity(null);
templateConfig.setService(null);
templateConfig.setController(null);
templateConfig.setServiceImpl(null);
templateConfig.setXml(null);
// 自定义模板配置,可以 copy 源码 mybatis-plus/src/main/resources/templates 下面内容修改,
// 放置自己项目的 src/main/resources/templates 目录下, 默认名称一下可以不配置,也
// 可以自定义模板名称 只要放到目录下,名字不变 就会采用这个模版 下面这句有没有无所谓
// 模版去github上看地址:
/**https://github.com/baomidou/mybatis-plus/tree/3.0/mybatis-plus-generator/src/main/resources/templates*/
// templateConfig.setEntity("/templates/entity.java");
return templateConfig;
}
private static PackageConfig getPackageConfig() {
String entity = DAO_OUTPUT_MODULE + ENTITY_PATH;
String mapper = DAO_OUTPUT_MODULE + MAPPER_PATH;
String xml = DAO_OUTPUT_MODULE + XML_PATH;
String service = SERVICE_OUTPUT_MODULE + SERVICE_PATH;
String serviceImpl = SERVICE_OUTPUT_MODULE + SERVICE_IMPL_PATH;
String controller = CONTROLLER_OUTPUT_MODULE + CONTROLLER_PATH;
return new PackageConfig()
// 地址需要解析成,形如xxx.xxx.xxx.xxx这种点.连接形式
.setParent(PARENT_PACKAGE_PATH.replace('/', '.').substring(1))
.setEntity(getPointLinkString(entity))
.setMapper(getPointLinkString(mapper))
.setXml(getPointLinkString(xml))
.setService(getPointLinkString(service))
.setServiceImpl(getPointLinkString(serviceImpl))
.setController(getPointLinkString(controller));
}
private static String getPointLinkString(String slashLinkString){
//将所有/转为.然后,将首字符删除
return slashLinkString.replace('/', '.').substring(1, slashLinkString.length()-1);
}
private static DataSourceConfig getDataSourceConfig() {
DataSourceConfig dsc = new DataSourceConfig();
dsc.setDbType(DB_TYPE);
dsc.setUrl(DB_URL);
dsc.setDriverName(DB_DRIVER_CLASS_NAME);
dsc.setUsername(DB_USER_NAME);
dsc.setPassword(DB_PASSWORD);
return dsc;
}
private static GlobalConfig getGlobalConfig() {
// 全局配置
GlobalConfig gc = new GlobalConfig();
//设置文件作者author
gc.setAuthor(AUTHOR);
//打开文件
gc.setOpen(true);
String projectPath = System.getProperty("user.dir");
//设置文件生成后,open弹窗的路径
gc.setOutputDir(projectPath);
//文件覆盖
gc.setFileOverride(true);
gc.setActiveRecord(true);
// XML 二级缓存
gc.setEnableCache(false);
// XML ResultMap 生成查询的映射结果
gc.setBaseResultMap(true);
// XML columList 生成查询的结果列
gc.setBaseColumnList(false);
// 设置swagger注解 ,这个要把swagger的依赖添加好,否则可先置为false
gc.setSwagger2(true);
return gc;
}
/**
* <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.isNotBlank(ipt)) {
return ipt;
}
}
throw new MybatisPlusException("请输入正确的" + tip + "!");
}
}