java-crud-common.mdc 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. ---
  2. description: Java CRUD 通用规范(分层、SQL 仅 XML、Mapper、实体、Swagger、注入、自检);适用于各 java* skill
  3. globs: "**/*.java,**/mapper/**/*.xml,**/resources/mapper/**/*.xml"
  4. alwaysApply: false
  5. ---
  6. # Java CRUD 通用规则(java-common)
  7. > 适用范围:各项目 CRUD skill(java1/java2/java4/java5 等)。
  8. > 目标:跨项目通用约束;项目差异以各 skill「场景差异」为准。
  9. ## 一、分层职责(通用)
  10. - 统一分层:`Controller -> Service -> Mapper -> Mapper.xml`
  11. - `Controller` 仅处理请求接收、参数绑定、响应封装
  12. - 业务规则、流程编排、事务边界在 `Service` 层
  13. - `Controller` 不直接操作 `Mapper`
  14. ## 二、SQL 放置规则(通用)
  15. - SQL 只能写在 `*Mapper.xml`
  16. - 禁止在 `Controller`/`Service` 中拼接 SQL
  17. - 禁止在 `Mapper.java` 使用注解 SQL(如 `@Select/@Update/@Delete/@Insert`)
  18. ## 三、Mapper/XML 规范(通用)
  19. - `Mapper.java` 仅保留方法签名
  20. - 自定义方法必须在 `*Mapper.xml` 中提供同名 `id`
  21. - `namespace` 必须与 Mapper 接口全限定名一致
  22. - `Mapper.xml` 目录统一 `resources/mapper/**`
  23. - 禁止 `select *`,必须显式列字段
  24. - 动态 SQL 使用标准标签:`where/trim/set/foreach`
  25. ## 四、实体生成规范(通用)
  26. - 除非用户明确要求,否则实体类默认使用 Lombok 生成样板代码(如 `@Data`、`@Builder`、`@NoArgsConstructor`、`@AllArgsConstructor`)
  27. - 若项目已有既定风格(例如仅使用 `@Getter/@Setter`),优先跟随项目既有风格
  28. ## 五、Swagger 规范(通用)
  29. - 若项目已使用 Swagger/OpenAPI(如 Springfox、springdoc、Knife4j),必须沿用现有方案与注解风格
  30. - 若项目未使用 Swagger/OpenAPI,且任务涉及接口开发或文档能力,需要引入与当前 Spring Boot 版本匹配的实现方案
  31. - 引入后应保持文档注解风格统一,避免在同一项目混用多套 Swagger 方案
  32. ## 六、依赖注入规范(通用)
  33. - 若项目其他模块已有明确注入风格(如 `@Resource`、`@Autowired`、`@RequiredArgsConstructor`),优先沿用既有实现
  34. - 若项目中没有可参考的既有实现,默认使用构造器注入,并使用 Lombok `@AllArgsConstructor` 注入 Service 或其他依赖对象
  35. ## 七、标准生成步骤(通用)
  36. 1. 识别实体与主键信息(并检查是否已有同名文件)
  37. 2. 生成/补全 Controller(分页、详情、新增、修改、删除、批删)
  38. 3. 生成/补全 Service 与 ServiceImpl(不写 SQL)
  39. 4. 生成/补全 Mapper 与 Mapper.xml(SQL 全部落 XML)
  40. 5. 按项目差异对齐返回体、路由风格、日志/权限注解
  41. ## 八、自检清单(通用)
  42. - [ ] 无注解 SQL(`@Select/@Update/@Delete/@Insert`)
  43. - [ ] Controller 无业务编排
  44. - [ ] SQL 全部在 `*Mapper.xml`
  45. - [ ] `namespace` 与 Mapper 全限定名一致
  46. - [ ] 未使用 `select *`
  47. - [ ] 接口风格与目标模块一致