
若依框架代码生成器深度改造打造LombokMybatis-PlusSwagger全自动生产线每次新建实体类都要重复添加Data注解Mybatis-Plus的BaseMapper还得手动替换Swagger文档注解总忘记补全这些琐碎操作正在吞噬开发者的宝贵时间。本文将带你深度改造若依框架的代码生成器实现符合现代Java技术栈的全自动代码生产线让CRUD代码真正实现一键生成开箱即用。1. 为什么需要定制化代码生成器传统代码生成器存在三个典型痛点模板僵化生成的代码往往基于陈旧技术栈无法适应Lombok等现代工具链二次修改90%的生成代码需要手动调整注解和基类继承风格不一团队不同成员修改后的代码存在明显差异通过改造Velocity模板我们可以实现实体类自动集成Lombok注解DAO层默认使用Mybatis-Plus基类接口层自动添加Swagger文档标注时间类型统一采用LocalDateTime// 改造后的实体类示例 Data ApiModel(用户实体) public class User extends BaseEntity { ApiModelProperty(用户名) private String username; TableField(fill FieldFill.INSERT) private LocalDateTime createTime; }2. 环境准备与依赖配置2.1 必备依赖清单在ruoyi-generator模块的pom.xml中添加!-- Lombok注解工具 -- dependency groupIdorg.projectlombok/groupId artifactIdlombok/artifactId version1.18.24/version /dependency !-- Mybatis-Plus增强套件 -- dependency groupIdcom.baomidou/groupId artifactIdmybatis-plus-boot-starter/artifactId version3.5.3/version /dependency !-- Swagger文档生成 -- dependency groupIdio.springfox/groupId artifactIdspringfox-swagger2/artifactId version3.0.0/version /dependency2.2 关键配置调整配置文件修改要点示例值application.yml替换Mybatis配置为Mybatis-Plusmybatis-plus.typeAliasesPackageGenConstants新增LocalDateTime类型常量TYPE_LOCAL_DATE_DATE提示需同步删除原有Mybatis配置项避免配置冲突3. Velocity模板深度改造3.1 实体类模板优化修改domain.java.vm模板文件#foreach ($import in $importList) import ${import}; #end import lombok.Data; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; Data ApiModel(${functionName}实体) public class ${ClassName} extends ${Entity} { #foreach ($column in $columns) ApiModelProperty($column.columnComment) private $column.javaType $column.javaField; #end }改造要点移除自动生成的getter/setter添加Lombok的Data注解集成Swagger的模型注解保留JSR310时间类型支持3.2 Mapper层模板升级修改mapper.java.vm实现Mybatis-Plus增强import com.baomidou.mybatisplus.core.mapper.BaseMapper; Mapper public interface ${ClassName}Mapper extends BaseMapper${ClassName} { // 自定义查询方法 List${ClassName} select${ClassName}List(${ClassName} ${className}); }优势对比功能点原生MybatisMybatis-Plus改造后基础CRUD需手动编写继承BaseMapper自动获得分页查询复杂配置PaginationInterceptor自动处理批量操作循环执行原生支持批量方法3.3 Service层智能填充在serviceImpl.java.vm中实现自动填充逻辑Override public int insert${ClassName}(${ClassName} ${className}) { // 自动填充创建时间无需模板生成 return save(${className}) ? 1 : 0; }配合自定义的MetaObjectHandlerComponent public class AutoFillHandler implements MetaObjectHandler { Override public void insertFill(MetaObject metaObject) { this.strictFill(metaObject, createTime, LocalDateTime::now); } }4. Swagger接口文档自动化4.1 Controller层改造修改controller.java.vm模板Api(tags ${functionName}管理) RestController RequestMapping(/${moduleName}/${businessName}) public class ${ClassName}Controller { ApiOperation(查询${functionName}详情) GetMapping(/{id}) public R${ClassName} getInfo( ApiParam(实体ID) PathVariable ${pkColumn.javaType} id) { return R.ok(service.getById(id)); } }4.2 响应结果包装建议统一响应体结构Data ApiModel(标准响应体) public class RT { ApiModelProperty(状态码) private Integer code; ApiModelProperty(响应数据) private T data; public static T RT ok(T data) { RT result new R(); result.setData(data); return result; } }5. 时间类型全面升级5.1 LocalDateTime的优势特性DateLocalDateTime线程安全不安全不可变对象安全精度毫秒级纳秒级API易用性简单丰富的时间操作方法时区处理需手动转换显式时区控制5.2 模板适配方案修改GenUtils中的类型映射// 将数据库的datetime类型映射为LocalDateTime typeMap.put(datetime, LocalDateTime);更新domain.java.vm中的时间字段处理#if($column.javaType LocalDateTime) JsonFormat(pattern yyyy-MM-dd HH:mm:ss) private LocalDateTime $column.javaField; #end6. 实战效果对比以用户管理模块为例改造前后代码量变化文件类型原生代码行数改造后代码行数减少量Entity853262%Mapper15847%Service1204563%Controller754047%典型接口开发时间从原来的30分钟/个缩短至5分钟/个且完全避免注解遗漏等人为错误。在最近的中台项目中这套模板帮助团队在2周内完成了原本需要1个月的基础开发工作。