SuperAPI AI 工具集

spring-data-jpa

编程与开发

查看项目

更新于 10-15 09:45

技能介绍

用途

Spring Data JPA 技能适用于任务明确涉及 Spring Boot 代码库中持久化设计或实现的场景。它通过聚合根指导、查询模式选择、CQRS 读模型决策,以及内置的仓储与关系模板来增加价值。

主要能力

该技能提供以下核心能力:

  • 聚合根边界指导:帮助判断哪些类型应拥有仓储,哪些内部实体不应拥有。
  • 查询模式选择:在简单仓储、@Query 仓储、DTO 投影、自定义仓储、CQRS 查询服务之间做出选择。
  • CQRS 读模型决策:当读模型与写模型不同时,指导使用 CQRS 查询服务。
  • 内置模板:提供查询仓储、DTO 投影、自定义仓储、查询服务、关系模式等 Java 模板。
  • 性能指导:涵盖 N+1 风险、抓取计划问题、无界查询、批量操作、重读视图等。

关键规则

  • 绝不为每个实体创建仓储,只为聚合根创建仓储。
  • 当查询变得非平凡时,绝不依赖冗长的派生查询方法名。
  • 当实体状态转换重要时,绝不盲目使用 save(),需理解 persist 与 merge 行为。
  • 读密集路径优先使用投影或专用查询服务。
  • 除非现有架构有意为之,否则事务边界保持在服务层。

使用方式

工作流程分为六步:

  1. 识别持久化问题:收集最小上下文,判断类型是聚合根还是内部实体,任务是读侧、写侧还是两者,查询是简单查找、过滤搜索、聚合、投影还是动态条件,路径是否性能敏感,是否存在模块边界或松耦合约束。
  2. 选择实现模式:根据模式表决定加载哪个参考。简单仓储用于基本 CRUD 和 1-2 个简单查找;@Query 仓储用于多过滤、连接、排序、可读 JPQL;DTO 投影用于只读且性能关键的响应;自定义仓储用于 Criteria API、批量操作、EntityManager 逻辑;CQRS 查询服务用于分离读写模型、报表、专用读路径。
  3. 加载匹配参考:按需加载 query-patterns.md、dto-projections.md、custom-repositories.md、cqrs-query-service.md、relationships.md、performance-guide.md。
  4. 应用匹配资产:使用 assets/ 中的模板,包括 query-repository.java、dto-projection.java、custom-repository.java、query-service.java、relationship-patterns.java。模板使用与 creating-springboot-projects 相同的占位符约定:{{PACKAGE}}、{{MODULE}}、{{NAME}}、{{TABLE_NAME}}、{{TYPE}}、{{FIELD}}。
  5. 校验关系与事务边界:检查仓储仅存在于聚合根边界、延迟加载行为是有意的、行数可能增长处使用分页或投影、未在更合适时引入 @ManyToMany、读服务适当使用 @Transactional(readOnly = true)、写操作保持在服务层事务中。
  6. 校验性能敏感路径:当任务涉及 N+1 风险、抓取计划问题、无界查询、批量操作、应使用投影的重读视图时,阅读 performance-guide.md。

高价值模式

  • 仓储边界:聚合根获得仓储,内部子实体通常不获得。
  • 查询风格:简单查找用派生查询方法;连接、可读文本块或多过滤用 @Query;响应不需要实体时用 DTO 投影;读模型与写模型不同时用 CQRS 查询服务。
  • 关系:尽可能优先 @ManyToOne 而非 @OneToMany;当松耦合比导航更重要时使用 ID 而非实体引用;将 @ManyToMany 视为警告信号,优先使用显式连接实体。

输出格式

提出或实现持久化变更时,返回:推荐模式(模式、原因)、要更改的文件、使用的参考、要验证的风险。

适用场景

  • 设计或实现 Spring Boot 4 上的 Spring Data JPA。
  • 仓储边界、投影、查询模式、自定义仓储、CQRS 读模型相关任务。
  • 需要聚合根指导、查询模式选择、关系建模、性能校验的持久化工作。

限制

  • 不适用于 Spring Data JPA 之外的通用 SQL 或数据库管理工作。
  • 不适用于整项目迁移规划。
  • 不适用于属于 creating-springboot-projects 的广泛项目脚手架工作。
  • 关于收费、价格、平台等具体信息暂未提供。