mcpField
S
spring-data-jpa

spring-data-jpa

github.com/partme-ai開発71882 回インストール4 週間前に更新
リポジトリ

spring-data-jpa について

Spring Data JPAで永続化レイヤーを構築するためのスキルです。エンティティ、リポジトリ、クエリ、設定、トランザクションを扱い、ページングや監査、よくあるフェッチ問題への対処も案内します。

主な機能

  1. 01JPAエンティティと関連の定義
  2. 02Spring Dataリポジトリの作成
  3. 03派生クエリ、JPQL、ネイティブクエリの記述
  4. 04データソースとトランザクションの設定
  5. 05ページング、ソート、エンティティグラフの利用

活用シーン

  1. 01Springアプリケーションのデータアクセス実装
  2. 02ページングや独自リポジトリクエリの追加
  3. 03トランザクション境界とフェッチ戦略の確認

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/partme-ai/full-stack-skills --skill spring-data-jpa

インストール後、Claude Code で/spring-data-jpaを入力して読み込まれたか確認します。

同梱ファイルLICENSE.txt

詳細

このスキルを使用するタイミング

次のことをユーザーが希望する場合は、いつでもこのスキルを使用します。

  • アノテーション(@Entity、@Id、@Column)を使用して JPA エンティティを定義する
  • Spring Data リポジトリ(JpaRepository、CrudRepository)を作成する
  • 派生クエリメソッド、JPQL/ネイティブ SQL を使った @Query、Specifications を使用する
  • データソース、Hibernate の方言、トランザクション管理を設定する
  • ページネーション、ソート、監査、エンティティグラフを扱う

このスキルの使用方法

ワークフロー
  1. JPA アノテーションとリレーションシップのマッピングを使用してエンティティを定義します
  2. 派生クエリメソッドまたはカスタムクエリメソッドを備えた JpaRepository を拡張して、リポジトリを作成します
  3. application.yml または application.properties でデータソースを設定します
  4. 適切なトランザクション境界を設定し、ビジネスロジックをカプセル化するためにサービスを使用します
1. エンティティの定義
@Entity
@Table(name = "users")
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(nullable = false)
    private String name;

    @Column(unique = true, nullable = false)
    private String email;

    @CreatedDate
    private LocalDateTime createdAt;

    // Getters and setters
}
2. リポジトリ
public interface UserRepository extends JpaRepository<User, Long> {
    Optional<User> findByEmail(String email);
    List<User> findByNameContaining(String name);
    Page<User> findByNameContaining(String name, Pageable pageable);

    @Query("SELECT u FROM User u WHERE u.email = :email")
    Optional<User> findByEmailCustom(@Param("email") String email);
}
3. トランザクションを使用したサービス
@Service
@Transactional
public class UserService {
    private final UserRepository userRepository;

    public UserService(UserRepository userRepository) {
        this.userRepository = userRepository;
    }

    public User create(String name, String email) {
        User user = new User();
        user.setName(name);
        user.setEmail(email);
        return userRepository.save(user);
    }

    @Transactional(readOnly = true)
    public Page<User> search(String name, Pageable pageable) {
        return userRepository.findByNameContaining(name, pageable);
    }
}
4. 設定
spring:
  datasource:
    url: jdbc:postgresql://localhost:5432/mydb
    username: postgres
    password: password
  jpa:
    hibernate:
      ddl-auto: validate
    show-sql: false
    properties:
      hibernate.format_sql: true

ベストプラクティス

  • N+1 クエリ問題に注意し、フェッチ戦略を制御するには @EntityGraph または JOIN FETCH を使用します
  • 大規模なデータセットには、ページネーション(Pageable)とバッチ処理を使用します
  • エンティティと DTO を分離し、JPA エンティティを API レスポンスで直接公開しないでください
  • トランザクション境界を明確に定義し、読み取り操作には @Transactional(readOnly = true) を使用します
  • 本番環境で ddl-auto: update を使用する代わりに、スキーマのマイグレーションには Flyway または Liquibase を使用します

リソース

キーワード

spring data jpa, JPA, Repository, entity, query methods, JPQL, pagination, transactions, Hibernate, Spring Boot, persistence

コメント