Haigle 后端 Java 开发规范
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,安装 @user_d2dccf2d/backend-java-dev。
技能介绍
解决什么问题
Haigle 后端项目在长期协作中容易出现几类隐性偏差:数据库改动缺少可追溯的增量脚本;请求 VO 与响应 VO 对时间字段的表示不一致;Service 层混入自定义 SQL,数据访问边界模糊;updateById 会静默忽略 null 字段;复杂 SQL 写进注解字符串后难以维护;springdoc/Knife4j 按类的简单名注册文档组件,不同外层 VO 复用同名嵌套静态类时互相覆盖,接口返回正常但文档字段不全或错乱。
技能如何工作
规范把上述问题拆成可执行约定:
- 数据库:每次涉及数据库变动都要创建 SQL 增量文件,命名为
本次变动名称-时间戳到秒.sql,例如order-update-20260803155501.sql;同时把 SQL 按项目模块整合进原 SQL。 - 字段:请求 VO 的时间类型用
String接收;响应 VO 的时间类型与数据库保持一致,并在时间字段上添加规范要求的注解。 - Mapper:Service 层不允许出现自定义 SQL 查询方法,这类查询必须放在 Mapper 中;
updateById不会更新null字段,需要用LambdaUpdateWrapper显式set null;复杂 SQL 写 XML,不允许用注解字符串;生成完代码最后不用编译验证。 - Swagger:VO 中的嵌套静态类必须全局唯一命名,推荐带业务前缀,如
OrderItemVO、ProductGroupVO;若必须使用通用名,则加唯一@Schema(name = ..., description = ...)。排查文档字段不对但接口返回正确的问题时,先用 Grep 查找public static class \w+找出重复的嵌套类简单名,再给冲突类加唯一@Schema(name = ...);这只影响文档组件名,不改变接口 JSON。
适用边界与注意点
这套规范适用于 Haigle 后端 Java 项目里需要统一 SQL 增量、VO 时间字段、Mapper 边界和文档组件命名的场景。它不补充 SKILL.md 之外的示例注解或代码实现;示例 1、示例 2 在原始资料中以引用形式出现,使用时需要结合项目上下文确认。文档组件重名只影响 springdoc/Knife4j 的展示,不会改变接口实际返回结构。
使用场景
- 为 Haigle 项目做数据库表变更时,需要新建 `order-update-时间戳到秒.sql` 这类 SQL 增量文件并按模块整合回原 SQL。
- 写接口时不确定请求 VO 时间字段用什么类型,需要按规范用 `String` 接收,响应 VO 与数据库类型对齐并加注解。
- 排查接口返回正常但 Swagger 文档字段错乱的问题,需用 Grep 找同名嵌套静态类并补唯一 `@Schema(name = ...)`。
- Service 层需要查自定义 SQL 或更新 `null` 字段时,需要把查询移到 Mapper,并用 `LambdaUpdateWrapper` 显式 set null。
适合人员
- 负责 Haigle Java 服务开发的后端工程师,希望统一 SQL 增量、VO 时间字段和 Mapper 边界约定。
- 维护 springdoc/Knife4j 接口文档的开发,遇到文档组件被同名嵌套类覆盖时需要可执行的排查路径。
- 参与代码评审的技术负责人,想依据明确规则检查 Service 是否混入自定义 SQL、复杂 SQL 是否写入 XML。