mcpField
S
spring-data-jpa

spring-data-jpa

github.com/a-pavithraa开发8074 次安装3 天前更新
代码仓库

关于 spring-data-jpa

面向 Spring Boot 项目中使用 Spring Data JPA 的持久化设计与实现技能。它帮助开发者选择仓库、查询、投影或 CQRS 模式,并指导聚合边界、关系建模和事务处理。

主要功能

  1. 01选择仓库与查询模式
  2. 02使用 DTO 投影和 CQRS 查询服务
  3. 03建模聚合与实体关系
  4. 04设置服务层事务边界
  5. 05检查 N+1 查询等性能风险

适用场景

  1. 01为聚合根设计持久化方案
  2. 02为筛选查询选择实现模式
  3. 03用投影构建读取密集型响应
  4. 04审查关系建模与事务选择

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/a-pavithraa/springboot-skills-marketplace --skill spring-data-jpa

安装后在 Claude Code 中输入/spring-data-jpa确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

assets/
custom-repository.java
dto-projection.java
query-repository.java
query-service.java
relationship-patterns.java
references/
cqrs-query-service.md
custom-repositories.md
dto-projections.md
performance-guide.md
query-patterns.md
relationships.md

详细介绍

Spring Data JPA 实现

用途

当任务专门涉及 Spring Boot 代码库中的持久化设计或实现时,请使用此技能。此技能通过聚合根指导、查询模式选择、CQRS 读模型决策,以及随附的仓库和关系模板来提供帮助。

关键规则

  • 不要为每个实体都创建仓库。只为聚合根创建仓库。
  • 查询变得复杂时,不要依赖冗长的派生查询方法名。
  • 实体状态转换很重要时,不要盲目使用 save();应了解 persist 与 merge 的行为。
  • 对于读密集型路径,优先使用投影或专用查询服务。
  • 除非现有架构有意采用其他做法,否则应将事务边界放在服务层。

工作流

步骤 1:识别持久化问题

先收集最少量的上下文:

  1. 该类型是聚合根还是内部实体?
  2. 任务主要涉及读侧、写侧,还是两者都有?
  3. 查询属于简单查找、筛选搜索、聚合、投影,还是动态条件查询?
  4. 此路径是否对性能敏感?
  5. 是否存在会影响关系建模的模块边界或松耦合约束?
步骤 2:选择实现模式

使用此表决定接下来要加载什么。

模式适用场景阅读
简单仓库基本 CRUD 和 1-2 个简单查找现有代码或无需阅读
@Query 仓库多个筛选条件、联接、排序、易读的 JPQLreferences/query-patterns.md
DTO 投影只读且对性能要求较高的响应references/dto-projections.md
自定义仓库Criteria API、批量操作、EntityManager 逻辑references/custom-repositories.md
CQRS 查询服务分离读写模型、报表、专用读取路径references/cqrs-query-service.md

使用此决策指南:

需求简单@QueryDTO自定义CQRS
基本 CRUD是是否是是
自定义筛选条件否是是是是
最佳读取性能否有时是有时是
复杂动态逻辑否否否是是
清晰区分读写否否有时有时是
步骤 3:加载匹配的参考资料

仅加载当前任务所需的参考资料:

  • references/query-patterns.md
  • references/dto-projections.md
  • references/custom-repositories.md
  • references/cqrs-query-service.md
  • references/relationships.md
  • references/performance-guide.md
步骤 4:应用匹配的资源

使用 assets/ 中随附的模板,而不是从头重建模式:

  • assets/query-repository.java
  • assets/dto-projection.java
  • assets/custom-repository.java
  • assets/query-service.java
  • assets/relationship-patterns.java

模板使用与 creating-springboot-projects 相同的占位符约定:{{PACKAGE}}、{{MODULE}}、{{NAME}}、{{TABLE_NAME}}、{{TYPE}}、{{FIELD}}。完整表格请参阅 creating-springboot-projects/SKILL.md#placeholder-convention。

步骤 5:验证关系和事务边界

在最终确定更改之前,请检查:

  • 仓库仅存在于聚合根边界
  • 延迟加载行为是有意选择的
  • 行数可能增长时使用了分页或投影
  • 在联接实体更合适时,没有引入 @ManyToMany
  • 适当的读取服务使用了 @Transactional(readOnly = true)
  • 写操作保留在服务层事务中
步骤 6:验证对性能敏感的路径

如果任务涉及以下内容,请阅读 references/performance-guide.md:

  • N+1 风险
  • 获取计划问题
  • 无界查询
  • 批量操作
  • 应使用投影的繁重读取视图

优先采用的高价值模式

仓库边界
  • 聚合根应拥有仓库。
  • 内部子实体通常不需要。
查询风格
  • 简单查询使用派生查询方法。
  • 对于联接、可读文本块或多个筛选条件,使用 @Query。
  • 当响应不需要实体时,使用 DTO 投影。
  • 当读取模型与写入模型不同时,使用 CQRS 查询服务。
关系
  • 在可能的情况下,优先使用 @ManyToOne,而不是 @OneToMany。
  • 当松散耦合比导航更重要时,使用 ID,而不是实体引用。
  • 将 @ManyToMany 视为警示信号;优先使用显式联接实体。

输出格式

提出或实现持久化变更时,请返回:

## Recommended pattern
- Pattern:
- Why:

## Files to change
- `path/to/file`

## References used
- `references/...`

## Risks to verify
- ...

不适用此技能的情况

  • Spring Data JPA 以外的通用 SQL 或数据库管理工作
  • 整个项目的迁移规划
  • 属于 creating-springboot-projects 的广泛项目脚手架工作

评论

支持 Markdown