カテゴリ: SpringのDB操作 更新日: 2025/12/05

JpaRepositoryを使った基本的なCRUD操作を完全ガイド!初心者でもわかる実装方法

JpaRepositoryを使った基本的なCRUD操作
JpaRepositoryを使った基本的なCRUD操作

新人と先輩の会話形式で理解しよう

新人

「先輩、Springでデータベースの操作を簡単にする方法ってありますか?」

先輩

「SpringにはJpaRepositoryという便利なインターフェースがあって、データの登録、取得、更新、削除が簡単にできるんだ。」

新人

「それはすごいですね!具体的にどんな感じで使うんですか?」

先輩

「それじゃあ、JpaRepositoryについて詳しく説明していこう!」

1. JpaRepositoryとは?

1. JpaRepositoryとは?
1. JpaRepositoryとは?

Spring Data JPAが提供するJpaRepositoryは、データベースとのやり取りを簡単にするためのインターフェースです。これを使うことで、SQLを直接書かなくても、データの登録や取得、更新、削除といった操作が可能になります。特に初心者にとっては、複雑なコードを書かなくても済むため、開発の効率が大幅に向上します。

通常、データベース操作を行う場合、SQL文を手書きする必要がありますが、JpaRepositoryを利用することで、その手間を大幅に削減できます。

2. CRUD操作とは何か?

2. CRUD操作とは何か?
2. CRUD操作とは何か?

CRUDとは、データベース操作における基本的な4つの処理のことを指します。

  • Create(作成): 新しいデータを登録する
  • Read(読み取り): データを取得する
  • Update(更新): 既存のデータを変更する
  • Delete(削除): データを削除する

これらの操作は、Webアプリケーションでデータを扱う際に必ず必要となります。例えば、ユーザー情報を登録したり、投稿内容を取得したりする際に利用されます。

3. JpaRepositoryを使うと何が便利なのか?

3. JpaRepositoryを使うと何が便利なのか?
3. JpaRepositoryを使うと何が便利なのか?

JpaRepositoryを使うことで、以下のようなメリットがあります。

  • SQL不要: 標準的なCRUD操作はメソッド呼び出しで完結。
  • コード量の削減: 複雑なコードを書かなくても簡潔に記述可能。
  • メンテナンスが容易: コードがシンプルなので保守が楽。
  • 再利用性が高い: 共通のリポジトリとして複数のエンティティで使用できる。

例えば、エンティティクラスを用意して、リポジトリインターフェースをJpaRepositoryを継承して作成するだけで、データベースへのアクセスが簡単に行えるようになります。

以下は簡単なリポジトリの作成例です。


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

public interface UserRepository extends JpaRepository<User, Long> {
    // ここにメソッドを追加することでカスタムクエリも実現可能です。
}

このコードだけで、save()findById()delete()といった基本的なメソッドがすぐに使えるようになります。

4. 実際にエンティティクラスを作成する方法

4. 実際にエンティティクラスを作成する方法
4. 実際にエンティティクラスを作成する方法

Spring Data JPAでデータベースを操作するには、まずエンティティクラスを作成する必要があります。エンティティクラスは、データベースのテーブルに対応するJavaクラスです。クラスには@Entityアノテーションを付け、各フィールドには@Columnを指定してテーブルのカラムとマッピングします。

以下は、ユーザー情報を管理するためのUserエンティティの例です。


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

@Entity
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(nullable = false)
    private String name;

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

    public User() {}

    public User(String name, String email) {
        this.name = name;
        this.email = email;
    }

    // ゲッターとセッター
    public Long getId() { return id; }
    public void setId(Long id) { this.id = id; }
    public String getName() { return name; }
    public void setName(String name) { this.name = name; }
    public String getEmail() { return email; }
    public void setEmail(String email) { this.email = email; }
}

このクラスは、idnameemailの3つのフィールドを持ち、それぞれがデータベースのカラムに対応します。@Idアノテーションは主キーを示し、@GeneratedValueで自動採番を指定しています。

5. JpaRepositoryを使ったデータの登録(Create)の実装

5. JpaRepositoryを使ったデータの登録(Create)の実装
5. JpaRepositoryを使ったデータの登録(Create)の実装

次に、作成したUserエンティティをデータベースに登録する方法を解説します。まずは、UserRepositoryを作成してJpaRepositoryを継承します。


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

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

次に、データを登録するためのUserControllerを作成します。


import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;

@Controller
public class UserController {

    @Autowired
    private UserRepository userRepository;

    @GetMapping("/user/new")
    public String showCreateForm() {
        return "createUser"; // ユーザー作成画面のHTMLを表示
    }

    @PostMapping("/user/create")
    public String createUser(@RequestParam String name, @RequestParam String email, Model model) {
        User user = new User(name, email);
        userRepository.save(user);
        model.addAttribute("message", "ユーザーを登録しました。");
        return "result";
    }
}

このコードでは、/user/newでユーザー作成画面を表示し、/user/createでフォームから送信されたデータを保存します。

6. JpaRepositoryを使ったデータの取得(Read)の実装

6. JpaRepositoryを使ったデータの取得(Read)の実装
6. JpaRepositoryを使ったデータの取得(Read)の実装

登録したデータを取得する方法について解説します。JpaRepositoryにはfindAll()findById()などの便利なメソッドが用意されており、簡単にデータを取得できます。


import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class UserController {

    @Autowired
    private UserRepository userRepository;

    @GetMapping("/users")
    public String listUsers(Model model) {
        model.addAttribute("users", userRepository.findAll());
        return "userList"; // ユーザー一覧表示用HTML
    }
}

このコードでは、/usersにアクセスすると、すべてのユーザー情報が取得され、HTMLで一覧表示されます。

HTML側では以下のように記述します。


<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>ユーザー一覧</title>
</head>
<body>
    <h2>ユーザー一覧</h2>
    <table border="1">
        <tr>
            <th>ID</th>
            <th>名前</th>
            <th>メールアドレス</th>
        </tr>
        <tr th:each="user : ${users}">
            <td th:text="${user.id}"></td>
            <td th:text="${user.name}"></td>
            <td th:text="${user.email}"></td>
        </tr>
    </table>
</body>
</html>

これにより、登録されたユーザーがブラウザ上で一覧表示されます。

7. JpaRepositoryを使ったデータの更新(Update)の実装

7. JpaRepositoryを使ったデータの更新(Update)の実装
7. JpaRepositoryを使ったデータの更新(Update)の実装

次に、既存のデータを更新する方法について解説します。JpaRepositoryでは、データの更新もsave()メソッドを利用して簡単に実装できます。ポイントは、更新したいエンティティのidが既に存在している場合、save()メソッドが自動的に更新処理を行うことです。

以下は、ユーザー情報を更新するためのUserControllerの実装例です。


import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;

@Controller
public class UserController {

    @Autowired
    private UserRepository userRepository;

    @GetMapping("/user/edit")
    public String showEditForm(@RequestParam Long id, Model model) {
        User user = userRepository.findById(id).orElse(null);
        if (user != null) {
            model.addAttribute("user", user);
            return "editUser"; // ユーザー編集用のHTML画面
        }
        model.addAttribute("message", "指定されたユーザーが見つかりません。");
        return "result";
    }

    @PostMapping("/user/update")
    public String updateUser(@RequestParam Long id, @RequestParam String name, @RequestParam String email, Model model) {
        User user = userRepository.findById(id).orElse(null);
        if (user != null) {
            user.setName(name);
            user.setEmail(email);
            userRepository.save(user);
            model.addAttribute("message", "ユーザー情報を更新しました。");
        } else {
            model.addAttribute("message", "ユーザーが見つかりませんでした。");
        }
        return "result";
    }
}

/user/editで編集画面を表示し、/user/updateでデータを更新します。更新対象のユーザーが存在しない場合はエラーメッセージを表示します。

8. JpaRepositoryを使ったデータの削除(Delete)の実装

8. JpaRepositoryを使ったデータの削除(Delete)の実装
8. JpaRepositoryを使ったデータの削除(Delete)の実装

データの削除も非常に簡単です。JpaRepositoryにはdeleteById()メソッドが用意されており、これを使用することで指定したIDのデータを削除できます。


import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;

@Controller
public class UserController {

    @Autowired
    private UserRepository userRepository;

    @GetMapping("/user/delete")
    public String showDeleteForm(@RequestParam Long id, Model model) {
        User user = userRepository.findById(id).orElse(null);
        if (user != null) {
            model.addAttribute("user", user);
            return "deleteUser"; // 削除確認用のHTML画面
        }
        model.addAttribute("message", "ユーザーが見つかりません。");
        return "result";
    }

    @PostMapping("/user/delete")
    public String deleteUser(@RequestParam Long id, Model model) {
        if (userRepository.existsById(id)) {
            userRepository.deleteById(id);
            model.addAttribute("message", "ユーザーを削除しました。");
        } else {
            model.addAttribute("message", "指定されたユーザーが存在しませんでした。");
        }
        return "result";
    }
}

上記のコードでは、/user/deleteで削除確認画面を表示し、確認後に/user/deleteへのPOSTリクエストでデータを削除します。ユーザーが存在しない場合にはエラーメッセージを返します。

9. 実装したCRUD操作のまとめと動作確認方法

9. 実装したCRUD操作のまとめと動作確認方法
9. 実装したCRUD操作のまとめと動作確認方法

これまでに解説したCRUD操作(作成・読み取り・更新・削除)を実装することで、基本的なユーザー管理機能が完成しました。動作確認の手順は以下の通りです。

  1. ユーザー作成: /user/newにアクセスし、新規ユーザーを登録します。
  2. ユーザー一覧確認: /usersにアクセスして、登録したユーザーが一覧に表示されることを確認します。
  3. ユーザー更新: 一覧から対象ユーザーを選択し、/user/edit?id=ユーザーIDにアクセスして情報を変更します。
  4. ユーザー削除: /user/delete?id=ユーザーIDにアクセスし、該当ユーザーを削除します。

正しく動作している場合、ユーザーの追加・変更・削除がそれぞれの画面で反映されます。

今回の実装では、pleiadesのGradleプロジェクトを使用し、Spring Bootで簡単にデータベース操作を実現しました。@Controllerを使用したことで、ビューを通じた画面遷移が実現でき、初心者にもわかりやすい構成となっています。

まとめ

まとめ
まとめ

ここまでJpaRepositoryを使ったCRUD操作の流れを、会話形式と豊富な実装例を通して確認してきました。振り返ってみると、データベース操作の中心となる作成・取得・更新・削除という四つの処理が、Spring Data JPAによって驚くほどシンプルに実現できることがよく分かります。特に、複雑なSQLを直接記述する必要がなく、エンティティとリポジトリを正しく作成するだけで直感的にデータを扱える点は、大規模開発でも小規模プロジェクトでも大きな利点になります。 さらに、エンティティクラスに注目すると、データベースのテーブル構造をそのままJavaクラスとして表現できるため、コード全体の見通しが良くなるだけでなく、読みやすさと保守性も向上します。今回の記事では、ユーザー情報の管理を例に、作成から削除まで一連の流れを実装し、実際にどのような画面遷移が行われるのかを学びました。特に、リスト表示や編集画面、削除確認といったUIの流れと合わせて理解することで、Webアプリケーション全体の動作がつかみやすくなったはずです。 また、findAll()findById() といったJpaRepositoryが提供する標準メソッドは、Springの便利さを強く実感できる部分でもあります。読み取りや検索処理がスムーズに書けることで、バックエンドの処理はもちろん、フロント側の画面構築との結びつきも理解しやすくなります。 今回の内容を通じて、Spring BootとJpaRepositoryを組み合わせることで、初心者でもすぐに実践的なアプリケーションが作れるという手応えを感じてもらえたのではないでしょうか。次に取り組む際には、独自の検索メソッドを追加したり、複雑な条件のクエリを定義したりと、さらに発展した使い方にも挑戦できます。

振り返りとしてのサンプルコード


import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class ReviewCrudController {

    @Autowired
    private UserRepository userRepository;

    @GetMapping("/review/saveSample")
    public String saveSample() {
        User user = new User("振り返り 太郎", "review@example.com");
        userRepository.save(user); // CRUD操作の基礎・作成処理
        return "reviewSaveResult";
    }

    @GetMapping("/review/listSample")
    public String listSample(Model model) {
        model.addAttribute("users", userRepository.findAll()); // 読み取り処理の基礎
        return "reviewUserList";
    }
}

サンプルコードでは、CRUDの基礎となる保存処理と一覧取得の流れを簡単にまとめています。アプリケーション全体の理解が進むと、こうした基本処理がどれほど多くの画面や機能に関連しているのかを自然と実感できるでしょう。特に、登録後に一覧画面へ遷移する流れや、更新後に結果メッセージを返す処理は実践で頻繁に使うパターンです。こうした積み重ねが、初心者にとって大きな成長ポイントになります。 また、削除処理における存在確認や、編集処理の対象ユーザー取得など、エラーハンドリングや条件分岐も実務では欠かせない要素です。今回の内容は、それらの基礎を理解するための大切な一歩となります。

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

生徒:「今回のCRUDの流れを実際にコードで見たことで、おおまかな仕組みがつかめた気がします。思ったより少ないコードでデータを扱えるんですね。」

先生:「そうだね。Spring Data JPAを使えば、必要最低限の記述だけで多くの処理が実現できるんだよ。エンティティとリポジトリの仕組みを理解しておくと、応用も効きやすくなる。」

生徒:「一覧表示や編集、削除の流れが実際の画面とつながっていて、どう動いているのかが具体的にイメージできました。」

先生:「画面遷移と合わせて考えると理解が進むよね。今回学んだCRUD操作は、ほぼすべてのWebアプリケーションで必要になるので、しっかり身につけておくと役立つ場面が多いよ。」

生徒:「今後は検索条件を増やしたり、もっと複雑な処理も書いてみたいです。」

先生:「いい意欲だね。まずは今回の基礎を確実に押さえて、そこからカスタムクエリやページング機能などにも挑戦していこう。」

生徒:「はい!実際に手を動かして学んでいきます!」

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

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

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

JpaRepositoryとは何ですか?Spring Bootでの使い方が知りたいです。

JpaRepositoryとは、Spring Data JPAが提供するインターフェースで、データベース操作を簡単にするために使われます。Spring Bootと組み合わせることで、SQLを書くことなくCRUD操作が行えるのが特徴です。
コメント
コメント投稿は、ログインしてください

まだ口コミはありません。

関連記事:

関連記事なし

カテゴリの一覧へ
新着記事
New1
SpringのWeb開発(Spring MVC)
Spring MVCで @Size を使って文字列長を制限する方法|フォームバリデーションを初心者向けに解説
New2
SpringのWeb開発(Spring MVC)
Spring MVCの数値チェック:@Min / @Max で数値範囲を検証する方法を初心者向けに解説
New3
SpringのWeb開発(Spring MVC)
Spring MVCで使う @Valid と @NotNull の基礎(Spring Bootフォームチェックの基本)を初心者向けに解説
New4
Thymeleaf
Thymeleafの基本的な書き方を完全ガイド!初心者向けサンプル解説
人気記事
No.1
Java&Spring記事人気No1
Thymeleaf
Thymeleaf とは?初心者向けにThymeleafの基本を徹底解説
No.2
Java&Spring記事人気No2
Spring認証(Spring Security)
セッション管理の基本(@SessionAttributes)を完全解説!初心者でもわかるセッションの仕組み
No.3
Java&Spring記事人気No3
Springの基本
Spring Bootの環境変数の設定方法をやさしく解説!初心者向けapplication.propertiesの使い方
No.4
Java&Spring記事人気No4
SpringのDB操作
JPAの標準クエリメソッド(findById, findAll)を完全解説!初心者でもわかるデータ取得の基本
No.5
Java&Spring記事人気No5
Springの基本
Springの@Autowiredとは?依存性注入(DI)を初心者向けに解説
No.6
Java&Spring記事人気No6
SpringのAPI開発(REST & GraphQL)
REST APIの主要なHTTPメソッド(GET, POST, PUT, DELETE)を初心者向けにわかりやすく解説!
No.7
Java&Spring記事人気No7
SpringのWeb開発(Spring MVC)
@Controller と @RestController の違いを完全解説!初心者向けSpring MVC入門
No.8
Java&Spring記事人気No8
SpringのAPI開発(REST & GraphQL)
REST APIのステータスコード一覧と適切な使い方