告别重复劳动!MyBatis-Plus Generator 3分钟生成全套CRUD代码方案
你还在手写Entity、Mapper、Service重复代码吗?还在为字段变更频繁修改XML配置吗?本文将带你掌握MyBatis-Plus Generator(代码生成器)的实战技巧,通过简单配置即可一键生成符合阿里巴巴开发规范的全套代码,让你从此专注业务逻辑开发。
为什么选择MyBatis-Plus Generator
MyBatis-Plus Generator是MyBatis-Plus生态中的核心组件,作为一款超强自动代码生成器,它能够根据数据库表结构自动生成Entity实体类、Mapper接口、Service服务层、Controller控制层以及XML映射文件。相比传统开发方式,它能将代码生成时间从几小时缩短到几分钟,同时保证代码风格的一致性。
核心优势包括:
- 无侵入:完全基于MyBatis增强,不改变原有生态
- 高度定制:支持模板引擎、命名策略、注解生成等个性化配置
- 多数据库支持:内置MySQL、Oracle、PostgreSQL等20+数据库适配
- 全链路生成:覆盖从数据访问层到控制层的完整代码链路
快速上手:10行代码实现自动生成
使用Generator只需简单三步:添加依赖、编写配置、执行生成。以下是Spring Boot环境下的快速启动示例:
1. 添加依赖
在pom.xml中添加MyBatis-Plus Generator依赖:
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>最新版本</version>
</dependency>
<!-- 模板引擎依赖,任选其一 -->
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
</dependency>
2. 编写生成配置
创建CodeGenerator.java,配置数据源和生成策略:
public class CodeGenerator {
public static void main(String[] args) {
// 1. 全局配置
GlobalConfig gc = new GlobalConfig.Builder()
.outputDir(System.getProperty("user.dir") + "/src/main/java")
.author("开发人员")
.openDir(false)
.build();
// 2. 数据源配置
DataSourceConfig dsc = new DataSourceConfig.Builder("jdbc:mysql://localhost:3306/test", "root", "password")
.build();
// 3. 策略配置
StrategyConfig sc = new StrategyConfig.Builder()
.addInclude("user", "order") // 生成的表名
.entityBuilder().enableLombok() // 启用Lombok注解
.controllerBuilder().enableRestStyle() // 生成REST风格控制器
.build();
// 4. 执行生成
new AutoGenerator(dsc)
.global(gc)
.strategy(sc)
.execute();
}
}
核心配置类位于mybatis-plus-generator/src/main/java/com/baomidou/mybatisplus/generator/AutoGenerator.java,通过链式调用完成配置组装。
3. 执行生成
运行main方法后,Generator会在指定目录下生成如下文件结构:
src/main/java
└── com/example/demo
├── entity // 实体类
├── mapper // Mapper接口
├── service // Service接口
├── service/impl // Service实现类
└── controller // 控制器
高级定制:打造符合团队规范的代码
Generator提供了丰富的定制化配置,满足不同团队的编码规范需求。以下是几个实用的高级配置场景:
命名策略配置
通过NamingStrategy自定义表名到类名、字段名到属性名的转换规则:
strategyBuilder()
.naming(NamingStrategy.underline_to_camel) // 下划线转驼峰
.columnNaming(NamingStrategy.underline_to_camel)
.addTablePrefix("t_", "sys_") // 去除表前缀
相关实现见NamingStrategy.java,内置了多种常见命名转换规则。
模板引擎切换
Generator支持Velocity、Freemarker、Beetl等多种模板引擎,默认使用Velocity。切换为Freemarker示例:
new AutoGenerator(dsc)
.templateEngine(new FreemarkerTemplateEngine())
// 其他配置...
.execute();
模板引擎实现位于mybatis-plus-generator/src/main/java/com/baomidou/mybatisplus/generator/engine/目录,可通过实现AbstractTemplateEngine接口自定义模板加载逻辑。
自定义注解生成
通过TableFieldAnnotationHandler自定义字段注解生成规则,例如添加Swagger注解:
entityBuilder()
.addTableFills(new Column("create_time", FieldFill.INSERT)) // 自动填充配置
.tableFieldAnnotationHandler(new ITableFieldAnnotationHandler() {
@Override
public void process(AnnotationAttributes attributes, TableField field) {
attributes.add("ApiModelProperty", field.getComment());
}
})
默认实现见DefaultTableFieldAnnotationHandler.java,可通过实现接口扩展更多注解类型。
实战技巧:提升开发效率的最佳实践
1. 数据库字段自动填充
通过IFill接口配置创建时间、更新时间等公共字段的自动填充:
strategyBuilder()
.entityBuilder()
.addTableFills(
new DefaultFill("create_time", FieldFill.INSERT, LocalDateTime.class),
new DefaultFill("update_time", FieldFill.INSERT_UPDATE, LocalDateTime.class)
)
2. 条件构造器生成
启用BaseMapper接口的条件构造器功能,无需手写SQL:
mapperBuilder()
.enableBaseResultMap() // 生成基本结果映射
.enableBaseColumnList() // 生成基本列列表
生成的Mapper接口会继承BaseMapper,获得CRUD操作能力:
public interface UserMapper extends BaseMapper<User> {
// 无需编写基本CRUD方法
}
3. 自定义模板路径
通过TemplateConfig指定自定义模板文件路径:
new TemplateConfig.Builder()
.entity("/templates/entity.java")
.mapper("/templates/mapper.java")
.build()
常见问题解决
1. 中文乱码问题
在全局配置中指定编码格式:
globalBuilder()
.fileOverride()
.outputDir(outputDir)
.commentDate("yyyy-MM-dd")
.charset("UTF-8")
2. 字段类型映射错误
自定义类型转换器,修正数据库类型到Java类型的映射:
dataSourceConfigBuilder()
.typeConvertHandler((metaInfo, dbColumnType) -> {
if ("datetime".equals(metaInfo.getTypeName())) {
return DbColumnType.LOCAL_DATE_TIME;
}
return dbColumnType;
})
类型转换核心逻辑位于TypeRegistry.java。
3. 多模块项目配置
通过PackageConfig指定不同模块的包路径:
packageConfigBuilder()
.parent("com.example.demo")
.moduleName("user")
.entity("entity")
.mapper("mapper")
总结与展望
MyBatis-Plus Generator作为一款成熟的代码生成工具,已广泛应用于各类Java项目中。它不仅减少了重复劳动,更重要的是通过标准化代码生成,提升了团队协作效率。随着MyBatis-Plus生态的不断完善,Generator将支持更多数据库类型和代码风格。
官方文档:README-zh.md
源码地址:mybatis-plus-generator/
掌握Generator的使用,将为你节省大量机械劳动时间,让你更专注于业务逻辑的实现。现在就尝试将它集成到你的项目中,体验自动化代码生成的魅力吧!
提示:定期关注项目更新,获取最新特性和bug修复。项目地址:https://gitcode.com/gh_mirrors/my/mybatis-plus
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考





