カテゴリ: Spring 更新日: 2026/01/16

Spring Data JPAのJpaRepositoryインターフェースの使い方を完全ガイド!初心者でも安心

Spring Data JPAのJpaRepository
Spring Data JPAのJpaRepository

教材紹介 Spring Boot 学習のおすすめ教材

Spring Bootを使ったWebアプリケーション開発を、 環境構築から実践まで一通り学びたい方には、 定評のある入門書が参考になります。

Spring Boot 3 プログラミング入門をAmazonで見る

※ Amazon広告リンク

先生と生徒の会話形式で理解しよう

生徒

「Springでデータベース操作を簡単に行う方法ってありますか?」

先生

「Spring Data JPAを使うと、簡単にデータベース操作ができますよ。その中でも、JpaRepositoryインターフェースが便利です。」

生徒

「具体的にはどう便利なんですか?」

先生

JpaRepositoryを使うと、基本的なCRUD操作を自動生成できるんです。では、使い方を見ていきましょう!」

1. JpaRepositoryインターフェースとは?

1. JpaRepositoryインターフェースとは?
1. JpaRepositoryインターフェースとは?

JpaRepositoryは「エンティティごとのデータ操作をまとめて面倒みてくれる窓口」です。保存・取得・削除といった基本操作の型が最初から用意されているため、私たちはSQL文を書かずにメソッドを呼ぶだけで済みます。難しい設定を覚える前でも、「このエンティティをこう扱いたい」という要望を素直にコードへ落とし込めるのが最大の利点です。

使い方の第一歩は「エンティティとその主キーの型を教える専用インターフェース」を作ること。下の短いサンプルでは、Userエンティティ(主キーはLong)を扱うリポジトリを宣言しています。これだけで、保存や全件取得などのメソッドが自動で使えるようになります。


import org.springframework.data.jpa.repository.JpaRepository;

// Userエンティティ用の「窓口」を宣言するだけ
public interface UserRepository extends JpaRepository<User, Long> { }

イメージをつかむための超短い実行例です。アプリ起動時に1件保存し、すぐ全件を数えています。SQLは一切書いていません。


import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;

@Component
class SampleRunner implements CommandLineRunner {
    @Autowired
    private UserRepository userRepository;

    @Override
    public void run(String... args) {
        userRepository.save(new User(null, "Taro")); // 1件保存
        System.out.println(userRepository.findAll().size()); // 件数を確認
    }
}

まとめると、JpaRepositoryは「エンティティに対する基本操作を、安全な型で、短いコードで」実現するための入口です。まずは上のようにリポジトリを1つ用意し、メソッドを呼ぶ感覚に慣れていくと理解が進みます。

2. JpaRepositoryの主な機能

2. JpaRepositoryの主な機能
2. JpaRepositoryの主な機能

JpaRepositoryには、日常的に使うデータ操作が「最初から安全に」そろっています。ボタンを押す感覚でメソッドを呼べばよく、SQLは不要です。ここでは名前と役割をイメージしやすいように、超基本だけを短く整理します。

  • 保存:save(entity) … 新規作成・更新のどちらにも使える万能ボタン。
  • 1件取得:findById(id) … 見つからない場合に備えてOptionalで返るのが安全。
  • 全件取得:findAll() … テーブルの中身をまるっと取り出す。
  • 削除:deleteById(id) / delete(entity) … 指定したものを消す。
  • 件数・存在確認:count() / existsById(id) … 一覧前の軽いチェックに便利。
  • カスタム検索の土台:メソッド名で検索条件を表す(例:findByName)。

どれも「目的が名前から分かる」ことがポイントです。下の短いサンプルは、1件保存→全件取得→存在確認→削除という流れをまとめたもの。雰囲気だけつかめば十分です。


import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
class QuickDemoService {
    @Autowired
    private UserRepository userRepository; // JpaRepository<User, Long>

    void quickDemo() {
        // 1) 保存(新規作成)
        User saved = userRepository.save(new User(null, "Taro"));

        // 2) 全件取得(一覧表示の起点に)
        System.out.println("total=" + userRepository.findAll().size());

        // 3) 存在確認(IDがあるかを軽くチェック)
        boolean ok = userRepository.existsById(saved.getId());
        System.out.println("exists=" + ok);

        // 4) 削除(不要になったら片付け)
        userRepository.deleteById(saved.getId());
    }
}

ここまでが「主な機能」の入り口です。まずはメソッド名と役割を結びつけて覚えると、後の応用(より詳しい実装や検索の工夫)もスムーズになります。

生徒

saveって、新規と更新をどうやって見分けてるんですか?」

先生

「エンティティの主キー(ID)がポイントです。IDが未設定なら新規作成、既に存在するIDなら更新として扱われます。戻り値に確定したIDが入るので、そのまま使えますよ。」

生徒

findByIdOptionalなのはなぜですか?」

先生

「“見つからない可能性”をコードで表現するためです。isPresent()orElseで分岐できるので、ぬるぽ(NullPointerException)対策にもなります。」

生徒

「存在だけ確かめたいときは?」

先生

existsByIdが手早いです。中身はいらないけど“あるかどうか”だけ知りたい場面で軽く確認できます。」

生徒

「削除は気をつけることありますか?」

先生

「基本はdeleteByIdでOK。ただし、他のデータがそのIDに依存している場合は消せないこともあります。まずは練習では単体で試し、関連を学んだら丁寧に扱いましょう。」

3. JpaRepositoryを使った基本的な実装

3. JpaRepositoryを使った基本的な実装
3. JpaRepositoryを使った基本的な実装

ここでは「最小構成」でJpaRepositoryを使う手順だけに絞って紹介します。やることは3つだけです。(1)エンティティを作る、(2)リポジトリを宣言する、(3)アプリ側から呼ぶ。この順番を押さえておけば、後続のCRUD解説もスッと入ります。

ステップ1:エンティティを用意する

データベースの1行=オブジェクト1つ、と考えると理解しやすいです。ここではUserという名前・主キー(ID)だけの超シンプル版を作ります。


import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.Id;

@Entity
public class User {
    @Id @GeneratedValue
    private Long id;
    private String name;

    public User() {}                     // JPA用のデフォルトコンストラクタ
    public User(Long id, String name) {  // 使いやすいように任意で用意
        this.id = id;
        this.name = name;
    }
    public Long getId() { return id; }
    public String getName() { return name; }
    public void setName(String name) { this.name = name; }
}
ステップ2:リポジトリを宣言する

JpaRepository<エンティティ型, 主キー型>を継承したインターフェースを1行作るだけ。これで保存・取得・削除などの基本メソッドが自動で使えます。@Repositoryは付けなくてもコンポーネントスキャンで検出されます。


import org.springframework.data.jpa.repository.JpaRepository;

// UserをLong型のIDで扱うリポジトリの「窓口」
public interface UserRepository extends JpaRepository<User, Long> { }
ステップ3:アプリ側から呼び出す

実際に使うときは、サービスやコントローラに注入(DI)してメソッドを呼びます。ここでは「登録して件数を確認する」だけの最小サンプルに留めます。


import org.springframework.stereotype.Service;

@Service
public class UserAppService {
    private final UserRepository userRepository;

    public UserAppService(UserRepository userRepository) { // コンストラクタDI
        this.userRepository = userRepository;
    }

    public void demo() {
        userRepository.save(new User(null, "Hanako")); // 保存(新規)
        System.out.println("users=" + userRepository.count()); // 件数だけ確認
    }
}

ポイントは「作業の9割は“型を正しく伝える”だけ」ということです。エンティティと主キー型を決めてリポジトリを宣言すれば、基本操作はそのまま呼べます。まずはこの最小セットで動かし、メソッドの感覚をつかんでから、次の章で扱う具体的なCRUDに進みましょう。

Spring FrameworkやThymeleafを使った Webアプリ開発の全体像をやさしく理解したい人には、 この入門書が定番です。

Spring Framework超入門をAmazonで見る

※ Amazon広告リンク

4. CRUD操作の実例

4. CRUD操作の実例
4. CRUD操作の実例

以下は、JpaRepositoryを使ったCRUD操作の例です。


import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Optional;

@Service
public class UserService {

    @Autowired
    private UserRepository userRepository;

    public User createUser(User user) {
        return userRepository.save(user);
    }

    public Optional<User> getUserById(Long id) {
        return userRepository.findById(id);
    }

    public void deleteUser(Long id) {
        userRepository.deleteById(id);
    }

    public List<User> getAllUsers() {
        return userRepository.findAll();
    }
}

このコードでは、UserServiceクラスを使ってCRUD操作を実装しています。userRepositoryを呼び出すだけで、基本的な操作が簡単に実現できます。

5. JpaRepositoryのカスタムメソッド

5. JpaRepositoryのカスタムメソッド
5. JpaRepositoryのカスタムメソッド

JpaRepositoryでは、クエリメソッドを使ってカスタムクエリを定義できます。以下はその例です。


import org.springframework.data.jpa.repository.JpaRepository;

import java.util.List;

public interface UserRepository extends JpaRepository<User, Long> {
    List<User> findByLastName(String lastName);
}

この例では、findByLastNameメソッドを定義するだけで、lastNameに基づく検索が可能になります。Spring Data JPAが自動的にクエリを生成します。

6. よくある質問

6. よくある質問
6. よくある質問

Q: JpaRepositoryはどのように設定する必要がありますか?

A: Spring Bootのプロジェクトで、@EnableJpaRepositoriesアノテーションを使用して有効化します。また、必要なデータベース設定をapplication.propertiesまたはapplication.ymlに記述してください。

Q: JpaRepositoryとCrudRepositoryの違いは?

A: JpaRepositoryCrudRepositoryを拡張しており、バルク操作やページングとソートの機能が追加されています。

Q: JpaRepositoryでカスタムクエリを作成するには?

A: メソッド名に基づくクエリメソッドを定義するか、@Queryアノテーションを使用します。

7. まとめ

7. まとめ
7. まとめ

JpaRepositoryはSpring Data JPAの中心的なインターフェースで、エンティティの管理を簡素化する強力なツールです。基本的なCRUD操作からカスタムクエリの生成まで、幅広い機能を提供しており、データベース操作の効率を大幅に向上させます。

特に、savefindByIdといったメソッドを使うことで、コードの記述量を減らしつつ、可読性を高めることができます。また、クエリメソッドを定義するだけで複雑な検索条件に対応できるため、柔軟な開発が可能です。

以下は、今回の学習内容を踏まえた応用例です。


import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;

@Service
public class ProductService {

    @Autowired
    private ProductRepository productRepository;

    public List<Product> getProductsByCategory(String category) {
        return productRepository.findByCategory(category);
    }

    public Product createOrUpdateProduct(Product product) {
        return productRepository.save(product);
    }

    public void deleteProductById(Long id) {
        productRepository.deleteById(id);
    }
}

この例では、商品情報を管理するためのリポジトリとサービス層を作成しました。これにより、簡単に商品を検索、登録、更新、削除することができます。

先生と生徒の振り返り会話

生徒

「今日はSpring Data JPAのJpaRepositoryについてたくさん学びました!」

先生

「そうですね。このインターフェースを使えば、データベース操作がとても簡単になりますね。」

生徒

「特にクエリメソッドが便利でした!メソッド名だけで検索ができるのは驚きです。」

先生

「その通りです。JpaRepositoryを使いこなせるようになると、開発効率が大幅に上がりますよ。」

生徒

「次はJpaRepositoryのページングやソートについても学んでみたいです!」

先生

「それも重要なトピックですね。次回は、ページングとソートについて詳しく見ていきましょう!」

この記事を読んだ人からの質問

この記事を読んだ人からの質問
この記事を読んだ人からの質問

プログラミング初心者からのよくある疑問/質問を解決します

Spring Data JPAでJpaRepositoryを使うには何が必要ですか?

Spring BootプロジェクトにSpring Data JPAの依存関係を追加し、@EnableJpaRepositoriesアノテーションで有効化する必要があります。また、データベース接続情報をapplication.propertiesやapplication.ymlに設定してください。
カテゴリの一覧へ
新着記事
JavaのIndexOutOfBoundsExceptionを完全ガイド!初心者でも理解できる例外処理と回避方法
スッキリわかるJava入門 第4版|独学でもレッスンでも学べる完全ガイド
JavaのCookieクラスのgetCommentメソッドを解説!Servlet開発でクッキーの説明文を取得する方法
JavaのBufferedOutputStreamクラスのwriteメソッドを徹底解説!初心者でもわかるファイルへのバイナリ書き込み
人気記事
No.1
Java&Spring記事人気No1
Spring BootとJavaの互換性一覧!3.5/3.4/3.3はJava 21・17に対応してる?
No.2
Java&Spring記事人気No2
Springの@Serviceアノテーションの使い方を徹底解説!初心者でもわかるSpring フレームワーク入門
No.3
Java&Spring記事人気No3
Spring Data JPA入門!findAll()やfindBy**()の使い方などデータベース操作の基礎を学ぶ
No.4
Java&Spring記事人気No4
Thymeleafのth:classappend属性の使い方を完全ガイド!初心者でもわかる動的クラス追加
No.5
Java&Spring記事人気No5
Spring BootのJakarta移行ガイド!初心者向けjavax→jakarta変更ポイント徹底解説
No.6
Java&Spring記事人気No6
Thymeleaf(タイムリーフ)入門!初心者でもわかるSpring Bootとテンプレートエンジンの使い方
No.7
Java&Spring記事人気No7
Springの@Repositoryアノテーションの使い方を徹底解説!初心者でもわかるSpringフレームワークのデータアクセス
No.8
Java&Spring記事人気No8
JavaのArrayListクラスとgetメソッドを完全解説!初心者でもわかるリストの要素取得

💻 作業効率アップに

長時間のコーディングでも疲れにくい♪ 静音ワイヤレスマウス

Logicool Signature M750 を見る

※ Amazon広告リンク