【Spring Boot】Spring Data JPA の基本をやさしく解説

Java入門・実践
スポンサーリンク
スポンサーリンク

はじめに

Spring Boot でデータベースを扱うとき、
Spring Data JPA を使うと驚くほどコードがシンプルになります。

  • SQL を書かなくても CRUD ができる
  • Repository を作るだけで DB と連携できる
  • 複雑な検索もメソッド名で表現できる

でも、仕組みが分からないまま使っている人も多いです。

この記事では、Spring Data JPA の基本を
やさしく・実務寄り で整理していきます。

まずはコードから見ていきましょう。


Spring Data JPA とは

一言でいうと、

「JPA(Java の ORM)を、もっと簡単に使えるようにした仕組み」

です。

  • JPA → ORM(Java と DB をつなぐ仕組み)
  • Spring Data JPA → JPA を便利に使うためのライブラリ

つまり、
DB アクセスを“ほぼ自動化”してくれる道具
と理解するとわかりやすいです。


まずは基本のコードを確認

Entity(DB のテーブルに対応するクラス)

Java
@Entity
public class User {

    @Id
    @GeneratedValue
    private Long id;

    private String name;
    private int age;
}

Repository(DB とやり取りする窓口)

Java
public interface UserRepository extends JpaRepository<User, Long> {
}

これだけで、

  • findById
  • findAll
  • save
  • delete
    などの CRUD が自動で使えるようになります。

Spring Data JPA の便利ポイント

CRUD が自動で使える

JpaRepository を継承するだけで、
基本的な DB 操作がすべて揃います。

Java
userRepository.findById(id);
userRepository.findAll();
userRepository.save(user);
userRepository.deleteById(id);

SQL を書く必要はありません。

メソッド名で検索条件を表現できる

Spring Data JPA の最大の特徴です。

Java
List<User> findByName(String name);
List<User> findByAgeGreaterThan(int age);
List<User> findByNameAndAge(String name, int age);

メソッド名を読むだけで、
どんな検索をするのかが分かる のが魅力です。

@Query で柔軟な検索もできる

複雑な検索は @Query を使います。

Java
@Query("SELECT u FROM User u WHERE u.name LIKE %:keyword%")
List<User> search(@Param("keyword") String keyword);

JPQL(Java の SQL 風言語)で書けます。

ページング・ソートが簡単

Java
Page<User> findAll(Pageable pageable);

ページングやソートも自動で対応できます。

トランザクションと相性が良い

Repository のメソッドは
Service 層の @Transactional の中で使う のが基本です。


Spring Data JPA の仕組みをふわっと理解する

Entity が DB のテーブルと対応する

  • クラス → テーブル
  • フィールド → カラム

Repository が SQL を自動生成する

JpaRepository が内部で SQL を作ってくれます。

JPA が Entity と DB のデータを変換する

  • DB → Entity
  • Entity → DB

この変換を ORM と呼びます。


実務でよくあるつまずき

Entity に @Id がない

→ 起動時にエラーになります。

フィールド名とカラム名が一致しない

→ @Column を使って明示する必要があります。

遅延ロード(LAZY)でエラー

→ Service 層でデータを使う前にトランザクションが終わっているパターン。

N+1 問題

fetch join や @EntityGraph を使うと改善できます。


Spring Data JPA をもっと活かすポイント

DTO と組み合わせる

Entity を外に出さず、
レスポンスは DTO に変換するのが基本です。

Service 層でロジックをまとめる

Repository は“データ係”、
Service は“頭脳”です。

@Transactional と組み合わせる

データの整合性を守るために必須です。

まとめ

Spring Data JPA は、
「DB アクセスを自動化してくれる便利な仕組み」
です。

  • CRUD が自動
  • メソッド名で検索
  • @Query で柔軟な検索
  • ページング・ソートも簡単
  • Entity と Repository を作るだけで動く

難しく聞こえますが、
「Repository を作るだけで DB とやり取りできる」
と理解できれば十分です。


decopon
decopon

Spring Data JPA を理解すると、
Repository 層のコードが一気にシンプルになります。
SQL を書かずに DB と連携できるだけで、
開発のスピードも保守性もぐっと上がります。
あなたの開発が、今日より少しだけ楽になりますように。

moco
moco

SQL を自動で作ってくれるなんて…
Spring さん、やさしいね。

コメント

タイトルとURLをコピーしました