Appearance
TIP
规定后端代码中注释的写法、粒度与维护要求,适用于 Spring Boot 3 + MyBatis-Plus 技术栈。注释使用中文书写,代码标识符仍遵循 命名规范。
//
/* ... */
/** ... */
TODO
FIXME
NOTE
// ❌ 重复代码含义 // 获取用户列表 List<SysUserPO> users = sysUserMapper.selectList(wrapper); // ❌ 注释掉的废弃代码(应直接删除,由 Git 追溯) // List<SysUserPO> oldList = oldMethod(); // ❌ 与实现不一致的过期注释 // 仅管理员可访问(实际已改为角色权限校验)
WARNING
禁止提交大段被注释掉的代码。若需保留参考,在 PR 描述或文档中说明,不要留在源码中。
/** * <p>系统用户控制器</p> * * @author Karl <karl_wn@126.com> * @since 2021/12/1 */ @Tag(name = "admin-sysuser") @RestController @RequestMapping("/sysuser/") public class SysUserController {
/** * <p>查询用户信息</p> * * @param params 查询条件参数 * @Return: com.baomidou.mybatisplus.core.metadata.IPage<java.util.Map<java.lang.String, java.lang.Object>> * @Since: 2022/7/1 */ @Operation(summary = "查询->全部用户信息", description = "查询全部用户信息") @PostMapping(value = "/findUsers") public IPage<Map<String, Object>> findUsers(@RequestBody String params) {
/** * 系统用户服务 */ @Resource private SysUserService sysUserService; /** * 厂端用户级别集合 */ private static final Set<Integer> FACTORY_SET = Set.of( 100701, 100702, 100703, 100704, 100705, 100706, 100709, 100710 );
Controller 接口需添加 OpenAPI 注解,自动生成 API 文档:
@Tag(name = "admin-sysuser") // 接口分组 @Operation(summary = "查询->全部用户信息") // 接口标题 @Parameter(description = "查询条件参数", required = true) // 参数说明
@Tag(name = "admin-xxx")
@Operation(summary = "...")
@Parameter(description = "...")
// 后端 status 为字符串枚举,需转换为前端识别的整数 Integer statusCode = statusMap.get(user.getStatusLabel()); // 兼容旧版本:部分用户 deptId 为 null,需降级为默认部门 if (user.getDeptId() == null) { user.setDeptId(DEFAULT_DEPT_ID); }
private void processUserImport(List<UserImportVO> list) { // 1. 校验必填字段 validateRequiredFields(list); // 2. 转换部门名称为 ID(前端传名称,后端存 ID) convertDeptNamesToIds(list); // 3. 批量插入用户 batchInsertUsers(list); }
// ✅ // 最大重试 3 次,间隔由配置中心统一控制 retryExecutor.execute(task, 3); String name = user.getName(); // ❌ 仅当行尾注释足够短且必要时才使用
HACK
// TODO(#1234): 接入真实导出接口,当前为 Mock 数据 // FIXME: 批量插入超过 1000 条时性能下降,待优化分批逻辑 // NOTE: 该字段只读,后端不允许通过此接口修改 // HACK: 第三方 SDK 未暴露异步方法,仅能用同步调用包装
TODO / FIXME 不得长期遗留;每个迭代应清理或转为正式任务。
动态 SQL 拼接处需加注释说明条件含义:
public static String findUsers(Page page, String conditions) { StringBuffer sql = new StringBuffer(); sql.append(" select "); sql.append(" u.id, "); sql.append(" u.account, "); sql.append(" u.user_name userName, "); // 驼峰别名,方便前端直接使用 sql.append(" from "); sql.append(" sys_user u "); sql.append(" left join sys_dept d on d.id = u.dept_id "); // 关联部门获取部门信息 sql.append(" where "); sql.append(conditions); sql.append(" and u.del_flag = 0 "); // 软删除过滤 return sql.toString(); }
// ❌ 无意义注释 // 查询用户 List<SysUserPO> list = sysUserMapper.selectList(wrapper); // ✅ 命名已足够清晰,无需注释 List<SysUserPO> list = sysUserMapper.selectList(wrapper); // ✅ 复杂逻辑才需要注释 // 需同时查询主部门和上级部门,用于前端部门树展示 List<SysDeptPO> deptTree = buildDeptTree(userId);
// ❌ 对外导出但无 Javadoc @PostMapping("/findUsers") public IPage<Map<String, Object>> findUsers(@RequestBody String params) { // ✅ 完整 Javadoc + OpenAPI 注解 /** * <p>查询用户信息</p> * * @param params 查询条件参数 * @Return: 分页用户列表 * @Since: 2022/7/1 */ @Operation(summary = "查询->全部用户信息", description = "查询全部用户信息") @PostMapping("/findUsers") public IPage<Map<String, Object>> findUsers(@RequestBody String params) {
提交代码前自查:
@author
@since
注释规范
TIP
规定后端代码中注释的写法、粒度与维护要求,适用于 Spring Boot 3 + MyBatis-Plus 技术栈。注释使用中文书写,代码标识符仍遵循 命名规范。
设计原则
注释类型
///* ... *///或 Javadoc/** ... */(Javadoc)TODO/FIXME/NOTE何时写 / 不写
✅ 应该写注释
❌ 不应写注释
WARNING
禁止提交大段被注释掉的代码。若需保留参考,在 PR 描述或文档中说明,不要留在源码中。
Javadoc 规范
类注释
方法注释
字段注释
OpenAPI 注解(Knife4j)
Controller 接口需添加 OpenAPI 注解,自动生成 API 文档:
@Tag(name = "admin-xxx")@Operation(summary = "...")@Parameter(description = "...")行内注释
业务逻辑说明
分步说明(复杂流程)
单行注释
//后加一个空格标记注释
TODOFIXMENOTEHACKWARNING
TODO/FIXME不得长期遗留;每个迭代应清理或转为正式任务。SQL 注释
动态 SQL 拼接处需加注释说明条件含义:
反例与正例
重复代码含义
文档完整性
注释 Checklist
提交代码前自查:
@author、@since)TODO/FIXME带有任务编号或修复计划描述相关规范