<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>${mybatisplus.version}</version>
</dependency>
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.32</version>
</dependency>
<properties>
<mybatisplus.version>3.5.6</mybatisplus.version>
</properties>
讲清楚如何使用
首先创建生成器对象
FastAutoGenerator.create("url", "username", "password");
FastAutoGenerator的构造器
private FastAutoGenerator(DataSourceConfig.Builder dataSourceConfigBuilder) {
this.dataSourceConfigBuilder = dataSourceConfigBuilder;
this.globalConfigBuilder = new GlobalConfig.Builder();
this.packageConfigBuilder = new PackageConfig.Builder();
this.strategyConfigBuilder = new StrategyConfig.Builder();
this.injectionConfigBuilder = new InjectionConfig.Builder();
this.templateConfigBuilder = new TemplateConfig.Builder();
}
Custom.Builder() 会返回一份 Custom配置
可通过每种Config进行配置
FastAutoGenerator.create("jdbc:mysql://localhost:3306/database", "root", "root")
// 全局配置 可以配置的具体查看 GlobalConfig.Builder
.globalConfig(builder -> {
builder.author("author");
})
// 包配置
// 可以配置的项具体可看 PackageConfig.Builder
.packageConfig((builder) -> builder.parent("parent")
.controller("controller")
.entity("entity")
.service("service")
.serviceImpl("serviceImpl"))
// 策略配置
// 可以配置的项具体可看 StrategyConfig.Builder
.strategyConfig(builder -> {
builder.addInclude("t_a","t_b");
})
// 模板引擎
.templateEngine(new FreemarkerTemplateEngine())
// 执行方法
.execute();
GlobalConfig.Builder
/**
* 全局配置构建
*
* @author nieqiurong 2020/10/11.
* @since 3.5.0
*/public static class Builder implements IConfigBuilder<GlobalConfig> {
private final GlobalConfig globalConfig;
public Builder() {
this.globalConfig = new GlobalConfig();
}
/**
* 禁止打开输出目录
*/
public Builder disableOpenDir() {
this.globalConfig.open = false;
return this;
}
/**
* 输出目录
*/
public Builder outputDir(@NotNull String outputDir) {
this.globalConfig.outputDir = outputDir;
return this;
}
/**
* 作者
*/
public Builder author(@NotNull String author) {
this.globalConfig.author = author;
return this;
}
/**
* 开启 kotlin 模式
*/
public Builder enableKotlin() {
this.globalConfig.kotlin = true;
return this;
}
/**
* 开启 swagger 模式
*/
public Builder enableSwagger() {
this.globalConfig.swagger = true;
return this;
}
/**
* 开启 springdoc 模式
*/
public Builder enableSpringdoc() {
this.globalConfig.springdoc = true;
return this;
}
/**
* 不生成service接口
*/
public Builder disableServiceInterface() {
this.globalConfig.serviceInterface = false;
return this;
}
/**
* 时间类型对应策略
*/
public Builder dateType(@NotNull DateType dateType) {
this.globalConfig.dateType = dateType;
return this;
}
/**
* 注释日期获取处理
* example: () -> LocalDateTime.now().format(DateTimeFormatter.ISO_DATE)
* * @param commentDate 获取注释日期
* @return this
* @since 3.5.0
*/ public Builder commentDate(@NotNull Supplier<String> commentDate) {
this.globalConfig.commentDate = commentDate;
return this;
}
/**
* 指定注释日期格式化
*
* @param pattern 格式
* @return this
* @since 3.5.0
*/ public Builder commentDate(@NotNull String pattern) {
return commentDate(() -> new SimpleDateFormat(pattern).format(new Date()));
}
@Override
public GlobalConfig build() {
return this.globalConfig;
}
}
PackageConfig.Builder
public static class Builder implements IConfigBuilder<PackageConfig> {
private final PackageConfig packageConfig;
public Builder() {
this.packageConfig = new PackageConfig();
}
public Builder(@NotNull String parent, @NotNull String moduleName) {
this();
this.packageConfig.parent = parent;
this.packageConfig.moduleName = moduleName;
}
/**
* 指定父包名
*
* @param parent 父包名
* @return this
*/ public Builder parent(@NotNull String parent) {
this.packageConfig.parent = parent;
return this;
}
/**
* 指定模块名称
*
* @param moduleName 模块名
* @return this
*/ public Builder moduleName(@NotNull String moduleName) {
this.packageConfig.moduleName = moduleName;
return this;
}
/**
* 指定实体包名
*
* @param entity 实体包名
* @return this
*/ public Builder entity(@NotNull String entity) {
this.packageConfig.entity = entity;
return this;
}
/**
* 指定service接口包名
*
* @param service service包名
* @return this
*/ public Builder service(@NotNull String service) {
this.packageConfig.service = service;
return this;
}
/**
* service实现类包名
*
* @param serviceImpl service实现类包名
* @return this
*/ public Builder serviceImpl(@NotNull String serviceImpl) {
this.packageConfig.serviceImpl = serviceImpl;
return this;
}
/**
* 指定mapper接口包名
*
* @param mapper mapper包名
* @return this
*/ public Builder mapper(@NotNull String mapper) {
this.packageConfig.mapper = mapper;
return this;
}
/**
* 指定xml包名
*
* @param xml xml包名
* @return this
*/ public Builder xml(@NotNull String xml) {
this.packageConfig.xml = xml;
return this;
}
/**
* 指定控制器包名
*
* @param controller 控制器包名
* @return this
*/ public Builder controller(@NotNull String controller) {
this.packageConfig.controller = controller;
return this;
}
/**
* 路径配置信息
*
* @param pathInfo 路径配置信息
* @return this
*/ public Builder pathInfo(@NotNull Map<OutputFile, String> pathInfo) {
this.packageConfig.pathInfo = pathInfo;
return this;
}
/**
* 连接父子包名
*
* @param subPackage 子包名
* @return 连接后的包名
*/
@NotNull
public String joinPackage(@NotNull String subPackage) {
return this.packageConfig.joinPackage(subPackage);
}
/**
* 构建包配置对象
* <p>当指定{@link #parent(String)} 与 {@link #moduleName(String)}时,其他模块名字会加上这两个作为前缀</p>
* <p>
* 例如:
* <p>当设置 {@link #parent(String)},那么entity的配置为 {@link #getParent()}.{@link #getEntity()}</p>
* <p>当设置 {@link #parent(String)}与{@link #moduleName(String)},那么entity的配置为 {@link #getParent()}.{@link #getModuleName()}.{@link #getEntity()} </p>
* </p>
*
* @return 包配置对象
*/
@Override
public PackageConfig build() {
return this.packageConfig;
}
}
StrategyConfig.Builder
/**
* 策略配置构建者
*
* @author nieqiurong 2020/10/11.
* @since 3.5.0
*/public static class Builder extends BaseBuilder {
private final StrategyConfig strategyConfig;
public Builder() {
super(new StrategyConfig());
strategyConfig = super.build();
}
/**
* 开启大写命名
*
* @return this
* @since 3.5.0
*/ public Builder enableCapitalMode() {
this.strategyConfig.isCapitalMode = true;
return this;
}
/**
* 开启跳过视图
*
* @return this
* @since 3.5.0
*/ public Builder enableSkipView() {
this.strategyConfig.skipView = true;
return this;
}
/**
* 禁用sql过滤
*
* @return this
* @since 3.5.0
*/ public Builder disableSqlFilter() {
this.strategyConfig.enableSqlFilter = false;
return this;
}
/**
* 启用 schema
* * @return this
* @since 3.5.1
*/ public Builder enableSchema() {
this.strategyConfig.enableSchema = true;
return this;
}
/**
* 增加过滤表前缀
*
* @param tablePrefix 过滤表前缀
* @return this
* @since 3.5.0
*/ public Builder addTablePrefix(@NotNull String... tablePrefix) {
return addTablePrefix(Arrays.asList(tablePrefix));
}
public Builder addTablePrefix(@NotNull List<String> tablePrefixList) {
this.strategyConfig.tablePrefix.addAll(tablePrefixList);
return this;
}
/**
* 增加过滤表后缀
*
* @param tableSuffix 过滤表后缀
* @return this
* @since 3.5.1
*/ public Builder addTableSuffix(String... tableSuffix) {
return addTableSuffix(Arrays.asList(tableSuffix));
}
public Builder addTableSuffix(@NotNull List<String> tableSuffixList) {
this.strategyConfig.tableSuffix.addAll(tableSuffixList);
return this;
}
/**
* 增加过滤字段前缀
*
* @param fieldPrefix 过滤字段前缀
* @return this
* @since 3.5.0
*/ public Builder addFieldPrefix(@NotNull String... fieldPrefix) {
return addFieldPrefix(Arrays.asList(fieldPrefix));
}
public Builder addFieldPrefix(@NotNull List<String> fieldPrefix) {
this.strategyConfig.fieldPrefix.addAll(fieldPrefix);
return this;
}
/**
* 增加过滤字段后缀
*
* @param fieldSuffix 过滤字段后缀
* @return this
* @since 3.5.1
*/ public Builder addFieldSuffix(@NotNull String... fieldSuffix) {
return addFieldSuffix(Arrays.asList(fieldSuffix));
}
public Builder addFieldSuffix(@NotNull List<String> fieldSuffixList) {
this.strategyConfig.fieldSuffix.addAll(fieldSuffixList);
return this;
}
/**
* 增加包含的表名
*
* @param include 包含表
* @return this
* @since 3.5.0
*/ public Builder addInclude(@NotNull String... include) {
this.strategyConfig.include.addAll(Arrays.asList(include));
return this;
}
public Builder addInclude(@NotNull List<String> includes) {
this.strategyConfig.include.addAll(includes);
return this;
}
public Builder addInclude(@NotNull String include) {
this.strategyConfig.include.addAll(Arrays.asList(include.split(",")));
return this;
}
/**
* 增加排除表
*
* @param exclude 排除表
* @return this
* @since 3.5.0
*/ public Builder addExclude(@NotNull String... exclude) {
return addExclude(Arrays.asList(exclude));
}
public Builder addExclude(@NotNull List<String> excludeList) {
this.strategyConfig.exclude.addAll(excludeList);
return this;
}
/**
* 包含表名
*
* @return this
*/ public Builder likeTable(@NotNull LikeTable likeTable) {
this.strategyConfig.likeTable = likeTable;
return this;
}
/**
* 不包含表名
*
* @return this
*/ public Builder notLikeTable(@NotNull LikeTable notLikeTable) {
this.strategyConfig.notLikeTable = notLikeTable;
return this;
}
/**
* 输出文件处理
*
* @return this
*/ public Builder outputFile(@NotNull IOutputFile outputFile) {
this.strategyConfig.outputFile = outputFile;
return this;
}
@Override
@NotNull public StrategyConfig build() {
this.strategyConfig.validate();
return strategyConfig;
}
}
使用案例
使用默认模板生成
public static void interactiveGenerate() {
String finalProjectPath = "D:/项目/PersonalProject/MallManagement/MallMServer/server";
String finalMiddlePath = "/src/main/java";
FastAutoGenerator.create(new DataSourceConfig.Builder("jdbc:mysql://localhost:3306/mallmserver", "root", "ROOTroot123!"))
// 全局配置
.globalConfig((builder) -> builder.author("y").outputDir(finalProjectPath + finalMiddlePath))
// 包配置
.packageConfig((builder) -> builder.parent("com.mallmserver")
.pathInfo(Collections.singletonMap(OutputFile.xml, "D:\\项目\\PersonalProject\\MallManagement\\MallMServer\\server\\src\\main\\resources\\mapper"))
)
// 策略配置
.strategyConfig((builder) -> builder.addInclude("mallmshop_keywords").build()
.controllerBuilder().enableRestStyle().enableFileOverride().build()
.entityBuilder().convertFileName((name)-> name + "Entity").enableLombok().build()
.serviceBuilder().build()
)
.templateEngine(new FreemarkerTemplateEngine())
.execute();
}
使用自定义模板生成
String finalProjectPath = "D:/项目/PersonalProject/MallManagement/MallMServer/server";
String finalMiddlePath = "/src/main/java";
FastAutoGenerator.create(new DataSourceConfig.Builder("jdbc:mysql://localhost:3306/mallmserver", "root", "ROOTroot123!"))
// 全局配置
.globalConfig((builder) -> builder.author("y").outputDir(finalProjectPath + finalMiddlePath))
// 包配置
.packageConfig((builder) -> builder.parent("com.mallmserver")
.pathInfo(Collections.singletonMap(OutputFile.xml, "D:\\项目\\PersonalProject\\MallManagement\\MallMServer\\server\\src\\main\\resources\\mapper"))
)
// 策略配置
.strategyConfig((builder) -> builder.addInclude("mallmshop_keywords")
.build()
)
.templateEngine(new FreemarkerTemplateEngine())
.injectionConfig(consumer -> {
List<CustomFile> customFile = new ArrayList<>();
// DTO
customFile.add(new CustomFile.Builder().packageName("entity").filePath(finalProjectPath + finalMiddlePath + "\\com\\mallmserver").fileName("Entity.java").templatePath("/templates/entity.java.ftl").enableFileOverride().formatNameFunction(TableInfo::getEntityName).build());
consumer.customFile(customFile);
})
.execute();