カテゴリ: Spring 更新日: 2025/11/01

Spring Data JPAのCRUDとQuery Methods:findBy~命名ルール徹底解説

Spring Data JPAのCRUDとQuery Methods:findBy~命名ルール徹底解説
Spring Data JPAのCRUDとQuery Methods:findBy~命名ルール徹底解説

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

生徒

「Spring Data JPAでデータを検索する方法って、どんな書き方があるんですか?」

先生

「Spring Data JPAでは、findByで始まるメソッド名を使って簡単に検索処理が書けますよ。命名ルールに従えば、SQLを書かずに検索できます。」

生徒

「メソッド名だけで検索できるなんて便利ですね。どんなルールになっているのか詳しく知りたいです。」

先生

「それでは、Spring Data JPAのCRUD操作とQuery Methodsの基本を一緒に見ていきましょう!」

1. Spring Data JPAでのCRUDとは?

1. Spring Data JPAでのCRUDとは?
1. Spring Data JPAでのCRUDとは?

Spring Data JPAは、Javaでデータベースとやり取りする際の手間を大幅に減らしてくれる便利なライブラリです。特にCRUD操作、つまりデータの作成(Create)、取得(Read)、更新(Update)、削除(Delete)を、専用のメソッドや命名ルールを使うだけで簡単に実装できます。

CRUD操作を行うには、JpaRepositoryを継承したインターフェースを作成するだけでOKです。以下がその基本の書き方です。


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

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

2. findByとは何か?Query Methodsの基本

2. findByとは何か?Query Methodsの基本
2. findByとは何か?Query Methodsの基本

Spring Data JPAでは、リポジトリにfindByというプレフィックスを付けたメソッドを定義することで、SQLを一切書かずに検索機能を実装できます。これを「Query Method(クエリメソッド)」と呼びます。

たとえば、ユーザーの名前で検索したいときは、以下のようにfindByNameというメソッドを定義するだけでOKです。


List<User> findByName(String name);

このように、メソッド名から自動的にJPQL(Java Persistence Query Language)を生成してくれるのがQuery Methodsの魅力です。

3. Query Methodsの命名ルール:基本構文

3. Query Methodsの命名ルール:基本構文
3. Query Methodsの命名ルール:基本構文

Spring Data JPAのQuery Methodsでは、findByに続けてエンティティのフィールド名をつけることで、自動的に検索処理を作成してくれます。基本構文は以下の通りです。

  • findByフィールド名:一致するデータを検索
  • findByフィールド名And他フィールド名:複数条件で検索
  • findByフィールド名OrderBy他フィールド名Desc:並び替え付き

例えば、名前とメールアドレスの両方で検索する場合は次のようになります。


List<User> findByNameAndEmail(String name, String email);

4. 条件演算子の活用:ContainingやBetweenなど

4. 条件演算子の活用:ContainingやBetweenなど
4. 条件演算子の活用:ContainingやBetweenなど

Query Methodsでは、さまざまな演算子を使って柔軟な検索が可能です。以下によく使う演算子をまとめます。

  • findByNameContaining:部分一致検索(LIKE)
  • findByAgeBetween:範囲検索
  • findByActiveTrue:真偽値による検索
  • findByCreatedAtAfter:指定日付より後
  • findByCreatedAtBefore:指定日付より前

たとえば、名前に「山」が含まれているユーザーを検索するには、以下のように書きます。


List<User> findByNameContaining(String keyword);

5. ソート・並び替えの記述方法

5. ソート・並び替えの記述方法
5. ソート・並び替えの記述方法

Query Methodsでは、結果のソート(昇順・降順)もメソッド名に記述できます。OrderByを使い、対象フィールドにAscDescをつけるだけです。


List<User> findByAgeGreaterThanOrderByNameAsc(int age);

この例では、指定した年齢より大きいユーザーを名前順(昇順)で取得します。

6. Optionalの活用でnull安全に

6. Optionalの活用でnull安全に
6. Optionalの活用でnull安全に

1件だけを取得する場合は、戻り値にOptionalを使うことで、nullチェックを安全に行うことができます。


Optional<User> findByEmail(String email);

取得できなかった場合もOptional.empty()が返るので、nullによるエラーを防げます。

7. JPQLや@Queryとの使い分け

7. JPQLや@Queryとの使い分け
7. JPQLや@Queryとの使い分け

Query Methodsで書けない複雑なクエリが必要なときは、@Queryアノテーションを使ってJPQLを明示的に書くことができます。


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

ただし、単純な検索であればfindBy命名ルールで十分対応可能なので、まずは命名ベースで書くのがおすすめです。

8. 実務で役立つfindBy命名例まとめ

8. 実務で役立つfindBy命名例まとめ
8. 実務で役立つfindBy命名例まとめ

以下は実務でよく使われるfindBy命名例です。

  • findByUsername:ユーザー名で検索
  • findByStatusAndRole:状態と役割で検索
  • findByTitleContainingOrderByCreatedAtDesc:タイトル部分一致+作成日降順
  • findByEmailIsNotNull:メールが設定されているユーザー

このような命名規則を理解しておくことで、Spring Data JPAで柔軟かつ高速な開発が可能になります。

カテゴリの一覧へ
新着記事
Javaのラムダ式で戻り値とvoidの使い方を解説!returnの書き方も完全理解
Javaのメソッド参照とコンストラクタ参照の使い方を完全ガイド!初心者向けに::とClass::newを解説
Javaのラムダ式の書き方を徹底解説!アロー演算子->の基本と使い方
Thymeleafのth:eachの使い方!ループ回数やindexなどの繰り返し処理を学ぼう
人気記事
No.1
Java&Spring記事人気No1
Spring BootとJavaの互換性一覧!3.5/3.4/3.3はJava 21・17に対応してる?
No.2
Java&Spring記事人気No2
Spring Boot JPA入門:エンティティ/リポジトリの基本と作り方
No.3
Java&Spring記事人気No3
Javaの@Validアノテーションを徹底解説!初心者でもわかる入力値検証の基本
No.4
Java&Spring記事人気No4
Springの@Repositoryアノテーションの使い方を徹底解説!初心者でもわかるSpringフレームワークのデータアクセス