カテゴリ: Spring 更新日: 2026/03/25

SpringDataJPAのJPAクエリメソッド「In」の使い方を完全ガイド!初心者向け解説

SpringDataJPAのクエリメソッド(In)
SpringDataJPAのクエリメソッド(In)

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

生徒

「SpringDataJPAで、複数の値に一致するデータを検索したい場合、どうすればいいですか?」

先生

「その場合は、Inを使うと効率的に検索できますよ!」

生徒

「具体的にはどのように書けばいいですか?」

先生

「それでは、基本的な使い方を見ていきましょう!」

1. Inとは?(複数の値をまとめて検索する便利な機能)

「1. Inとは?(複数の値をまとめて検索する便利な機能)」の重要ポイントを、初心者の方にも分かりやすく簡潔に解説します。

1. Inとは?(複数の値をまとめて検索する便利な機能)
1. Inとは?(複数の値をまとめて検索する便利な機能)

Spring Data JPAのクエリメソッド「In」は、データベースの中から「指定した複数の値のいずれかに一致するデータ」を一度にまとめて取得するための機能です。 SQLをご存知の方なら、WHERE column IN (...)という構文をイメージすると分かりやすいでしょう。

例えば、1人ずつ検索を繰り返すのではなく、「出席番号が1番、5番、10番の生徒を全員連れてきて!」と、リストを渡して一括でお願いするようなイメージです。 これにより、プログラムのコードがシンプルになり、データベースへのアクセス回数も減らせるため、効率的なシステム開発には欠かせません。

身近な例で考えてみよう!

プログラミングが初めての方でも、以下のような「お買い物リスト」を想像してみてください。

  • 普通の検索:「リンゴはある?」「バナナはある?」「メロンはある?」と1回ずつ店員さんに聞く。
  • Inを使った検索:「このリスト(リンゴ、バナナ、メロン)にある果物を全部持ってきて!」とまとめて依頼する。

具体的には、findByAgeIn(List.of(20, 25, 30))のように記述することで、20歳、25歳、30歳のユーザーを1つのリストとして受け取ることができます。 このように、In「複数の条件をスマートに処理したいとき」に非常に便利なメソッドです。

2. クエリメソッドの基本的な書き方

2. クエリメソッドの基本的な書き方
2. クエリメソッドの基本的な書き方

Spring Data JPAでは、メソッド名に特定のキーワードを含めるだけでSQLを自動生成してくれる「クエリメソッド」という便利な機能があります。 特に複数の値を条件に指定したい場合に活躍するのがInキーワードです。

まずは、特定の年齢(複数)に一致するユーザーを検索する、最もシンプルなコード例を見てみましょう。


public interface UserRepository extends JpaRepository<User, Long> {
    // 複数の年齢をリストで渡して、一致するユーザーをすべて取得する
    List<User> findByAgeIn(Collection<Integer> ages);
}

このメソッドの仕組みは非常に単純です。プログラミングが初めての方でも、以下の3つのポイントを押さえれば使いこなせます。

  • メソッド名のルール: findBy(〜を探す)+ Age(対象の変数名)+ In(〜の中に含まれる)という構成になっています。
  • 引数の役割: Collection<Integer> ages の中に「20, 25, 30」といった数字を入れて渡すと、そのいずれかに該当するデータをまとめて取得してくれます。
  • 自動生成されるSQL: 内部的には WHERE age IN (20, 25, 30) というSQL文が作られています。

これを使えば、わざわざ「20歳の場合」「25歳の場合」と何度も検索を繰り返す必要がなく、たった一行のメソッドで効率的にデータベースから情報を引き出すことができるようになります。

3. JPQLでの動作イメージ

3. JPQLでの動作イメージ
3. JPQLでの動作イメージ

上記のクエリメソッドは、以下のようなJPQLに変換されます。


SELECT u 
FROM User u 
WHERE u.age IN ?1

このJPQLでは、ageが指定された値のいずれかに一致するレコードを検索します。 データベース内のIN句に相当する動作をします。

4. 実際の使い方例

「4. 実際の使い方例」の重要ポイントを、初心者の方にも分かりやすく簡潔に解説します。

4. 実際の使い方例
4. 実際の使い方例

以下は、findByAgeInをサービス層で使用する具体例です。


@Service
public class UserService {
    private final UserRepository userRepository;

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

    public List<User> findUsersByAges(Collection<Integer> ages) {
        return userRepository.findByAgeIn(ages);
    }
}

このコードでは、指定された年齢リストに一致するユーザーを取得します。 例えば、findUsersByAges(List.of(25, 30, 35))を実行すると、25歳、30歳、35歳のユーザーが検索されます。

5. Inを使うときの注意点

5. Inを使うときの注意点
5. Inを使うときの注意点

Inを使用する際には、以下の点に注意してください。

  • コレクションが空の場合、結果は常に空になります。事前にコレクションの内容を確認してください。
  • 大規模なデータセットを検索する場合、パフォーマンスに注意が必要です。インデックスを適切に設定しましょう。
  • 指定するコレクションには、適切なデータ型を使用してください(例えば、IntegerString)。

これらの注意点を理解することで、効率的にInを活用することができます。

6.まとめ

6.まとめ
6.まとめ

この記事では、SpringDataJPAのクエリメソッドInを使った複数値検索について解説しました。 Inメソッドは、リストやコレクションに基づいて条件を指定し、該当するデータを効率的に取得するのに役立ちます。 クエリメソッドの名前を適切に設計することで、複雑なSQL文を書くことなく、データ検索が可能です。 また、JPQL変換の仕組みや使用例を通じて、実際の実装イメージが掴めたのではないでしょうか? 注意点としては、コレクションが空の場合の結果確認や、大規模データセットに対するパフォーマンスの最適化があります。

以下は、簡単なコード例とその実行結果を示したものです。


@Service
public class DemoService {
    private final UserRepository userRepository;

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

    public void executeDemo() {
        List<Integer> ages = List.of(20, 25, 30);
        List<User> users = userRepository.findByAgeIn(ages);
        users.forEach(user -> System.out.println(user.getName() + " - " + user.getAge()));
    }
}

John - 20
Alice - 25
Bob - 30

このコードでは、20歳、25歳、30歳のユーザーが正しく取得され、出力されます。Inの柔軟性と効率性を体感できるシンプルな例です。

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

生徒

「今回Inを使って複数の条件を検索する方法が理解できました!」

先生

「良かったです。複数条件を効率的に指定できるのがInの特徴ですね。」

生徒

「でも、条件が多すぎるとパフォーマンスが落ちることもあるんですよね?」

先生

「その通りです。インデックスを適切に設定したり、クエリの実行結果を検証することが重要です。」

生徒

「理解しました!次回のプロジェクトで早速使ってみます!」

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

「この記事を読んだ人からの質問」の重要ポイントを、初心者の方にも分かりやすく簡潔に解説します。

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

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

Spring Data JPAのクエリメソッド「In」とは、具体的にどのような機能を持つメソッドなのですか?初心者の学習のポイントを教えてください。

Spring Data JPAにおけるクエリメソッドの「In」は、データベースに対して特定のカラムの値が、指定した複数の候補値のいずれかに一致するデータを一括で検索・取得するための非常に便利な機能です。通常、Javaのプログラミングでデータベースから特定の条件でデータを取得する際はSQLを記述する必要がありますが、Spring Data JPAではリポジトリのインターフェースに定義されたメソッド名から自動的にクエリを生成します。例えば、特定のIDリストに合致するユーザー情報や、特定の年齢層に該当するレコードを一度の処理で取得したい場合に、この「In」キーワードを活用することで、コードの記述量を大幅に減らし、可読性の高い実装が可能になります。開発現場では非常によく使われる標準的な機能なので、基本的な使い方をマスターしておくことはJavaエンジニアとしての必須スキルと言えるでしょう。
カテゴリの一覧へ
新着記事
New1
Java
JavaのExceptionクラスを完全解説!初心者でも理解できる例外処理の基本
更新記事
New2
Thymeleaf
Thymeleafのth:classappend属性の使い方を完全ガイド!初心者でもわかる動的クラス追加
更新記事
New3
Java
Javaのカプセル化を完全ガイド!初心者でもわかるデータの保護と制御の使い方
更新記事
New4
Servlet
サーブレットでレスポンスを返す方法とは?PrintWriter・JSON・HTMLを初心者向けに解説!
更新記事
人気記事
No.1
Java&Spring記事人気No1
Spring
Spring BootとJavaの互換性一覧!3.5/3.4/3.3はJava 21・17に対応してる?
No.2
Java&Spring記事人気No2
Spring
Springの@Componentアノテーションの使い方を徹底解説!初心者でもわかるSpring Boot入門
No.3
Java&Spring記事人気No3
Java
Javaの@SuppressWarningsアノテーションの使い方を完全ガイド!初心者でもわかる警告の抑制方法
No.4
Java&Spring記事人気No4
JSP
JSPの基本タグ一覧と使い方まとめ!実務で使えるタグを紹介
No.5
Java&Spring記事人気No5
Spring
Springの@Serviceアノテーションの使い方を徹底解説!初心者でもわかるSpring フレームワーク入門
No.6
Java&Spring記事人気No6
Spring
Spring BootのJakarta移行ガイド!初心者向けjavax→jakarta変更ポイント徹底解説
No.7
Java&Spring記事人気No7
Java
Java開発環境「Eclipse(Pleiades)」のインストール方法とメリットを初心者向けに解説
No.8
Java&Spring記事人気No8
Thymeleaf
Thymeleafのth:checkedの使い方!チェックボックスON/OFFを動的に制御する方法