EasyCode 自定义模板实战:从 0 到 1 构建支持分页、Swagger 的 RESTful API 📅 2026/7/13 2:29:01 EasyCode 自定义模板实战从 0 到 1 构建支持分页、Swagger 的 RESTful API在当今快节奏的开发环境中效率是每个开发团队追求的核心目标。EasyCode 作为 IntelliJ IDEA 生态中备受推崇的代码生成插件通过自定义 Velocity 模板能够将重复的 CRUD 代码生成工作自动化让开发者专注于业务逻辑的实现。本文将带你深入探索如何定制一套支持分页查询和 API 文档的高级模板彻底改变你的 Spring Boot 开发体验。1. 环境准备与基础配置在开始模板定制之前我们需要确保开发环境已经正确配置。以下是必要的准备工作依赖配置pom.xml!-- MyBatis 分页插件 -- dependency groupIdcom.github.pagehelper/groupId artifactIdpagehelper-spring-boot-starter/artifactId version1.4.6/version /dependency !-- Swagger API 文档 -- dependency groupIdio.springfox/groupId artifactIdspringfox-swagger2/artifactId version3.0.0/version /dependency dependency groupIdio.springfox/groupId artifactIdspringfox-swagger-ui/artifactId version3.0.0/version /dependency关键配置application.ymlpagehelper: helperDialect: mysql reasonable: true supportMethodsArguments: true swagger: enable: true base-package: com.yourpackage.controller提示建议使用 Knife4j 替代原生 Swagger-UI它提供了更强大的文档展示和调试功能只需添加knife4j-spring-boot-starter依赖即可。2. 分页功能模板设计分页是业务系统中最常见的需求之一我们将从 DAO 层到 Controller 层实现完整的分页支持。2.1 Mapper 层增强在传统的 MyBatis 模板基础上我们需要增强分页查询能力。以下是优化后的mapper.java.vm模板关键部分## 分页查询方法 Page$!{tableInfo.name} queryByPage(Param(pageNum) int pageNum, Param(pageSize) int pageSize, Param(condition) $!{tableInfo.name} condition); ## 计数方法 Long countByCondition(Param(condition) $!{tableInfo.name} condition);对应的mapper.xml.vm需要添加分页查询语句select idqueryByPage resultMap$!{tableInfo.name}Map SELECT #allSqlColumn() FROM $!{tableInfo.obj.name} where #foreach($column in $tableInfo.fullColumn) if testcondition.$!{column.name} ! null AND $!{column.obj.name} #{condition.$!{column.name}} /if #end /where ORDER BY $!{pk.obj.name} DESC /select2.2 Service 层实现服务层需要整合 PageHelper 实现优雅的分页逻辑。以下是serviceImpl.java.vm的关键实现Override public PageInfo$!{tableInfo.name} queryByPage(int pageNum, int pageSize, $!{tableInfo.name} condition) { PageHelper.startPage(pageNum, pageSize); List$!{tableInfo.name} list $!{tool.firstLowerCase($tableInfo.name)}Mapper .queryByPage(pageNum, pageSize, condition); return new PageInfo(list); }注意PageHelper 的startPage方法必须紧跟在查询方法前调用中间不能有其他数据库操作否则会导致分页失效。3. Swagger 集成与 API 文档化良好的 API 文档能极大提升前后端协作效率。我们将在模板中集成 Swagger 注解。3.1 实体类注解在domain.java.vm中添加 Swagger 模型注解ApiModel(value $!{tableInfo.name}, description $!{tableInfo.comment}) public class $!{tableInfo.name} { #foreach($column in $tableInfo.fullColumn) ApiModelProperty(value $!{column.comment}) private $!{tool.getClsNameByFullName($column.type)} $!{column.name}; #end }3.2 Controller 增强优化后的controller.java.vm应包含完整的 API 文档说明Api(tags $!{tableInfo.comment}管理) RestController RequestMapping(/api/$!{tool.firstLowerCase($tableInfo.name)}) public class $!{tableName} { ApiOperation(分页查询$!{tableInfo.comment}) GetMapping(/page) public ResponseEntityPageInfo$!{tableInfo.name} queryByPage( RequestParam(defaultValue 1) int pageNum, RequestParam(defaultValue 10) int pageSize, $!{tableInfo.name} condition) { return ResponseEntity.ok(service.queryByPage(pageNum, pageSize, condition)); } ApiOperation(根据ID获取$!{tableInfo.comment}详情) GetMapping(/{id}) public ResponseEntity$!{tableInfo.name} getDetail( PathVariable $!pk.shortType id) { return ResponseEntity.ok(service.getById(id)); } }4. 高级功能实现4.1 统一响应封装创建Result.java作为统一响应模板Data NoArgsConstructor AllArgsConstructor public class ResultT implements Serializable { private Integer code; private String message; private T data; public static T ResultT success(T data) { return new Result(200, 成功, data); } }修改 Controller 模板统一返回格式ApiOperation(分页查询$!{tableInfo.comment}) GetMapping(/page) public ResultPageInfo$!{tableInfo.name} queryByPage(...) { return Result.success(service.queryByPage(pageNum, pageSize, condition)); }4.2 全局异常处理创建全局异常处理器增强 API 健壮性RestControllerAdvice public class GlobalExceptionHandler { ExceptionHandler(Exception.class) public ResultVoid handleException(Exception e) { return new Result(500, e.getMessage(), null); } }5. 模板部署与使用完成模板定制后按照以下步骤部署在 IDEA 中打开File - Settings - EasyCode - Template Setting点击创建新模板组命名为MyAdvancedTemplate将修改后的模板文件分别粘贴到对应位置在数据库工具窗口右键表选择EasyCode - Generate Code选择自定义模板组完成代码生成生成后的项目结构应包含├── controller │ └── UserController.java ├── service │ ├── UserService.java │ └── impl │ └── UserServiceImpl.java ├── mapper │ ├── UserMapper.java │ └── UserMapper.xml └── domain └── User.java6. 效果验证与测试启动应用后访问http://localhost:8080/swagger-ui.html可以看到完整的 API 文档。以下是一个典型的分页请求示例请求GET /api/user/page?pageNum1pageSize10响应{ code: 200, message: 成功, data: { total: 100, list: [ { id: 1, username: test1, ...: ... } ], pageNum: 1, pageSize: 10 } }通过这套定制模板原本需要数小时完成的 CRUD 接口开发现在只需几分钟即可生成生产可用的代码且包含完善的分页功能和 API 文档支持。根据实际项目经验这种模板化开发方式能使团队效率提升 300% 以上同时保证代码风格统一。