MyBatis-Plus代码生成器案例

wen java案例 2

MyBatis-Plus代码生成器实战案例:从零搭建高效CRUD开发流水线


目录导读

  1. 为什么你需要一个代码生成器?
  2. MyBatis-Plus代码生成器核心概念与版本选择
  3. 实战案例:基于Spring Boot的完整生成流程(附代码)
  4. 高级配置:自定义模板、逻辑删除与字段填充
  5. 常见问题FAQ与避坑指南
  6. 让代码生成器成为团队效率杠杆

为什么你需要一个代码生成器?

在当今快节奏的业务迭代中,后端开发人员常陷入重复劳动:编写Entity、Mapper、Service、Controller四件套,一个简单的用户表,可能涉及几十行样板代码。MyBatis-Plus代码生成器通过数据库表结构逆向生成全链路代码,能将单表CRUD开发时间从1小时压缩至3分钟,它不仅是工具,更是团队规范化的强制手段——生成的代码风格统一,注释完整,极大降低交接成本。

MyBatis-Plus代码生成器案例


MyBatis-Plus代码生成器核心概念与版本选择

核心原理:读取数据库表元数据(列名、类型、注释),通过Velocity/FreeMarker模板引擎渲染出.java文件。

版本关键点

  • 旧版(3.5.1以前):使用AutoGenerator类,配置链式调用。
  • 新版(3.5.1+):推荐FastAutoGenerator,API更简洁,支持Lambda风格。

依赖参考(Maven):

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-generator</artifactId>
    <version>3.5.3</version>
</dependency>
<dependency>
    <groupId>org.apache.velocity</groupId>
    <artifactId>velocity-engine-core</artifactId>
    <version>2.3</version>
</dependency>

实战案例:基于Spring Boot的完整生成流程

场景:为user表生成全部代码,包含实体、Mapper、Service、ServiceImpl、Controller。

准备数据库表

CREATE TABLE `user` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) DEFAULT NULL COMMENT '姓名',
  `email` varchar(100) DEFAULT NULL COMMENT '邮箱',
  `create_time` datetime DEFAULT CURRENT_TIMESTAMP,
  `deleted` tinyint(1) DEFAULT 0 COMMENT '逻辑删除',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB;

编写生成器启动类

public class CodeGenerator {
    public static void main(String[] args) {
        FastAutoGenerator.create("jdbc:mysql://localhost:3306/test", "root", "123456")
            .globalConfig(builder -> builder
                .author("你的名字")          // 作者
                .outputDir("D://my-project//src//main//java") // 输出路径
                .dateType(DateType.TIME_PACK)  // 时间策略
            )
            .packageConfig(builder -> builder
                .parent("com.example.demo")     // 父包名
                .entity("entity")               // 实体包
                .mapper("mapper")
                .service("service")
                .controller("controller")
            )
            .strategyConfig(builder -> builder
                .addInclude("user")             // 需要生成的表
                .entityBuilder()
                .logicDeleteColumnName("deleted") // 逻辑删除字段
                .enableLombok()                  // 开启Lombok
                .controllerBuilder()
                .enableRestStyle()               // 生成@RestController
                .build()
            )
            .execute();
    }
}

运行与产物检查
控制台输出Generate Success!后,检查D:/my-project/目录,你将得到:

  • User.java(带Lombok注解,自动识别注释)
  • UserMapper.java(继承BaseMapper)
  • IUserService.java及其实现
  • UserController.java(包含RESTful接口:GET/POST/PUT/DELETE)

验证:直接启动项目,调用GET /user/list,即可返回数据,无需手写一行业务代码。


高级配置与最佳实践

1 自定义模板(应对特殊需求)
若需在Controller中额外增加@ApiOperation注解,可在resources下创建/templates/controller.java.vm,然后在FastAutoGenerator中指定:

.templateConfig(builder -> builder.controllerTemplate("/templates/controller.java"))

2 混合逻辑删除与自动填充

  • 逻辑删除:如上文,在strategyConfig中指定.logicDeleteColumnName("deleted"),生成后实体字段会标注@TableLogic
  • 自动填充(如create_time):在全局配置中添加.metaObjectHandler(new MetaObjectHandler() {...}),生成代码无缝支持。

3 多模块生成
修改outputDir指向不同模块,或使用packageConfig配置不同包名,即可一次生成多模块代码。


常见问题FAQ与避坑指南

Q1:生成代码后,为什么Mapper接口没有@Mapper注解?
A:MyBatis-Plus通过@MapperScan扫描包,无需每个接口加注解,在启动类添加@MapperScan("com.example.demo.mapper")即可。

Q2:如何生成Service接口和实现类?
A:默认strategyConfig.serviceBuilder()已自动生成,如果只想要接口,设置.formatServiceFileName("%sService")并取消ServiceImpl生成。

Q3:数据库表前缀如何处理?
AstrategyConfig中启用.entityBuilder().columnFormat("%s")(默认去掉前缀),例如表t_user,可配置.addPrefix("t_")

Q4:生成速度慢或报错(如找不到驱动)?
A:确保mysql-connector-java依赖在生成器模块中(而非主应用模块),并驱动类名正确(新版为com.mysql.cj.jdbc.Driver)。

Q5:生成的Controller不支持分页?
A:MyBatis-Plus默认分页插件需要配置,生成器不会自动加,需手动在config类中添加PaginationInnerInterceptor,然后即可使用IPage参数。


让代码生成器成为团队效率杠杆

MyBatis-Plus代码生成器并非“银弹”,但它是消除重复劳动、保证代码一致性的利器。核心价值在于:将80%的表结构开发自动化,让团队聚焦于复杂业务逻辑。落地建议:在项目初期即配置好模板与规范,将生成器集成到CI流程中(如每次表结构变更后自动重新生成),确保持续交付速度。下一步:尝试结合Swagger生成接口文档、配合前端低代码平台,将开发效率推向新高度。

行动引导:立即将本文案例中的代码粘贴到你的项目中,针对现有的ordersproduct表跑一次生成,感受“三秒建完一架CRUD战斗机”的快感。如果遇到版本兼容性问题,优先检查Spring Boot版本与MyBatis-Plus的匹配度(推荐Boot 2.7+搭配Plus 3.5.x)。

抱歉,评论功能暂时关闭!