java
package com.wys.interaction.util;
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import java.util.Collections;
/**
* MyBatisPlus代码自动生成器
* <p>基于MyBatis-Plus Generator 3.5.x版本,用于自动生成以下代码:</p>
* <ul>
* <li>Entity实体类(包含Lombok注解、链式调用)</li>
* <li>Mapper接口及XML映射文件</li>
* <li>Service接口及实现类</li>
* <li>Controller控制器(RESTful风格)</li>
* </ul>
*
* <p>配置说明:</p>
* <ul>
* <li>数据库:MySQL (version库)</li>
* <li>模板引擎:FreeMarker</li>
* <li>命名策略:下划线转驼峰</li>
* <li>输出目录:wys-interaction模块</li>
* </ul>
*
* @author yswang
* @since 2026/6/10
*/
public class MyBatisPlusGenerator {
/**
* 主方法 - 执行代码生成
* <p>使用FastAutoGenerator的链式API配置并执行代码生成流程</p>
*
* @param args 命令行参数(未使用)
*/
public static void main(String[] args) {
// 获取项目根路径
String projectPath = System.getProperty("user.dir");
// 创建FastAutoGenerator实例并配置数据源
FastAutoGenerator.create(
"jdbc:mysql://localhost:3306/dev_wys_interaction?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=false&zeroDateTimeBehavior=convertToNull&serverTimezone=Asia/Shanghai",
"root",
"wys@1234"
)
// 全局配置:输出目录、作者、日期类型等
.globalConfig(builder -> {
builder.outputDir(projectPath + "/wys-interaction/src/main/java")
.author("yswang")
.dateType(DateType.TIME_PACK)
.disableOpenDir();
})
// 包配置:父包名、各层子包名、XML文件路径
.packageConfig(builder -> {
builder.parent("com.wys.interaction")
.entity("entity")
.mapper("mapper")
.service("service")
.serviceImpl("service.impl")
.controller("controller")
.pathInfo(Collections.singletonMap(
com.baomidou.mybatisplus.generator.config.OutputFile.xml,
projectPath + "/wys-interaction/src/main/resources/mapper"
));
})
// 策略配置:表名、命名规则、功能开关等
.strategyConfig(builder -> {
builder.addInclude("object_comment")
//.addTablePrefix("object_") // 去掉表名前缀,一般不需要
// Entity实体类构建配置
.entityBuilder()
.enableFileOverride()//覆盖已生成文件
.naming(NamingStrategy.underline_to_camel)//表名命名策略:将数据库表名的下划线风格转换为 Java 类名的驼峰风格
.columnNaming(NamingStrategy.underline_to_camel)//列名命名策略:将数据库表的列名转换为 Java 属性的命名风格
.enableLombok()//启用Lombok
.enableTableFieldAnnotation()//添加实体类字段的注释,在实体类的每个字段上添加 @TableField 注解
//.logicDeleteColumnName("deleted")//逻辑删除字段名,指定数据库中用于逻辑删除的列名为 deleted
.enableRemoveIsPrefix()//移除实体类属性的 is 前缀,is_deleted → deleted(而不是 isDeleted)
.enableChainModel()//启用链式模型,生成的 setter 方法返回当前对象(this),支持链式调用
.build()
// Mapper接口构建配置
.mapperBuilder()
.enableFileOverride()//覆盖已生成文件
.enableBaseResultMap()
.enableBaseColumnList()
.build()
// Service层构建配置
.serviceBuilder()
.enableFileOverride()//覆盖已生成文件
.formatServiceFileName("%sService")
.formatServiceImplFileName("%sServiceImpl")
.build()
// Controller层构建配置
.controllerBuilder()
.enableFileOverride()//覆盖已生成文件
.formatFileName("%sController")
.enableRestStyle()
.build();
})
// 指定使用FreeMarker模板引擎
.templateEngine(new FreemarkerTemplateEngine())
// 执行代码生成
.execute();
}
}
