别再手动敲CRUD了!用EasyCode+MyBatisPlus模板,5分钟生成RuoYi若依风格的后端代码
·
5分钟极速生成RuoYi风格代码:EasyCode+MyBatisPlus黄金组合实战
每次新建实体类时还在重复编写相似的Controller增删改查代码?RuoYi框架的标准结构虽然规范,但手动实现分页查询、统一返回格式等重复劳动会消耗开发者大量时间。本文将揭示如何通过EasyCode插件与MyBatisPlus模板的深度整合,实现符合RuoYi编码规范的代码全自动生成。
1. 环境准备与插件配置
在IntelliJ IDEA中安装EasyCode插件只需三步:
- 打开
File -> Settings -> Plugins - 搜索栏输入"EasyCode"
- 点击安装并重启IDE
配置数据库连接时有个实用技巧:对于MySQL连接,建议在URL后添加 &nullCatalogMeansCurrent=true 参数,这样可以避免生成代码时出现不必要的schema前缀。连接成功后,在数据库视图右键表名时会出现"EasyCode"菜单项。
提示:建议创建专门的模板配置目录,方便团队共享。将模板文件保存在版本控制系统中,新成员加入时直接导入即可保持团队代码风格统一。
2. RuoYi框架代码结构深度解析
RuoYi的Controller层有三大核心特征需要我们在模板中复现:
- 继承体系 :所有Controller必须继承
BaseController,才能使用startPage()和getDataTable()等分页方法 - 返回值规范 :
- 列表数据返回
TableDataInfo - 单条数据返回
AjaxResult.success() - 操作结果返回
toAjax()
- 列表数据返回
- 方法命名 :
- 查询列表:
find[Xxx]SelectList - 单条查询:
select[Xxx]ById - 增删改:
add[Xxx]/update[Xxx]/delete[Xxx]
- 查询列表:
Service层的典型结构如下表所示:
| 组件类型 | 必须实现的接口 | 典型方法签名示例 |
|---|---|---|
| Service接口 | IService | List findXxxSelectList(XxxDto dto) |
| Service实现类 | ServiceImpl<M,T> | 使用LambdaQueryWrapper构建条件查询 |
| Mapper接口 | BaseMapper | 带@Mapper注解,包含XML对应的查询方法 |
3. Velocity模板定制实战
3.1 Controller模板关键配置
## controller.java.vm
@RestController
@RequestMapping("/${tool.firstLowerCase($tableInfo.name)}")
@RequiredArgsConstructor
public class ${tableName} extends BaseController {
private final ${tableInfo.name}Service ${tool.firstLowerCase($tableInfo.name)}Service;
@PostMapping("/list")
public TableDataInfo list(@RequestBody ${tableInfo.name}Dto dto) {
startPage();
return getDataTable(service.find${tableInfo.name}SelectList(dto));
}
@PostMapping("/{id}")
public AjaxResult getById(@PathVariable Long id) {
return AjaxResult.success(service.select${tableInfo.name}ById(id));
}
}
3.2 分页查询DTO模板优化
RuoYi风格的分页查询DTO需要包含以下固定字段:
## dto.java.vm
@Data
public class ${tableInfo.name}Dto {
#foreach($column in $tableInfo.fullColumn)
private ${tool.getClsNameByFullName($column.type)} ${column.name};
#end
private Integer pageNum;
private Integer pageSize;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime beginTime;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime endTime;
}
3.3 MyBatisPlus增强配置
在mapper.xml模板中,我们需要实现动态条件查询:
## mapper.xml.vm
<select id="select${tableInfo.name}List" resultMap="${tableInfo.name}Map">
SELECT #allSqlColumn() FROM ${tableInfo.obj.name}
<where>
#foreach($column in $tableInfo.fullColumn)
<if test="${column.name} != null">
AND ${column.obj.name} = #{${column.name}}
</if>
#end
<if test="beginTime != null">
AND create_time >= #{beginTime}
</if>
<if test="endTime != null">
AND create_time <= #{endTime}
</if>
</where>
</select>
4. 高级技巧与异常处理
4.1 枚举类型特殊处理
对于字段类型为枚举的情况,模板需要特殊处理:
## pojo.java.vm
#if($column.type.contains("Enum"))
@Enumerated(EnumType.STRING)
#end
private $!{tool.getClsNameByFullName($column.type)} $!{column.name};
4.2 逻辑删除集成
在MyBatisPlus配置类中添加:
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
interceptor.addInnerInterceptor(new BlockAttackInnerInterceptor());
return interceptor;
}
实体类中添加注解:
## pojo.java.vm
@TableLogic
private Integer delFlag;
4.3 生成代码后的二次开发
虽然模板可以生成90%的标准代码,但仍需手动处理:
- 复杂业务逻辑实现
- 特殊校验规则添加
- 权限控制注解补充
- 业务异常处理
例如添加权限控制:
@PreAuthorize("@ss.hasPermi('system:user:query')")
public TableDataInfo list(...) {
// ...
}
5. 团队协作最佳实践
建议建立团队级的模板仓库,包含以下内容:
/templates
├── ruoyi
│ ├── controller.java.vm
│ ├── service.java.vm
│ └── ...
├── common
│ ├── pagination.dto.vm
│ └── response.java.vm
└── README.md
新项目初始化时,执行以下命令即可获取最新模板:
git clone <template-repo-url>
cp -r templates/ruoyi/* .idea/easyCode/
对于微服务项目,可以扩展模板支持Feign客户端生成:
## feign.java.vm
@FeignClient(name = "${serviceName}", path = "/${entityPath}")
public interface ${tableName}Feign {
@PostMapping("/list")
Result<PageInfo<${tableInfo.name}VO>> list(@RequestBody ${tableInfo.name}Query query);
}
更多推荐


所有评论(0)