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

Spring Data JPAのfindAllメソッドの使い方を完全ガイド!検索結果をThymeleafのth:eachで表示

JpaRepositoryのfindAllメソッド
JpaRepositoryのfindAllメソッド

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

生徒

「Springでデータベースに保存されているすべてのデータを簡単に取得する方法はありますか?」

先生

「Spring Data JPAのfindAllを使えばOKです。しかもこのメソッドは自分で実装を書く必要がありません。」

生徒

「えっ、メソッドの中身を書かなくても動くんですか?」

先生

「はい。JpaRepositoryが標準で用意してくれているので、呼び出すだけで全件が取れます。」

1. findAllメソッドとは?

1. findAllメソッドとは?
1. findAllメソッドとは?

findAllは、Spring Data JPA が標準で用意している「全件取得用メソッド」です。 特別なSQLを書いたり、難しい実装を準備したりする必要はありません。 エンティティ用のリポジトリを JpaRepository<Entity, ID> として継承すると、 その瞬間から findAll() を呼び出せるようになります。 プログラミング初心者でも「メソッドを1回呼ぶだけ」でデータベースに登録されたレコードを全部取り出せる、非常に分かりやすい仕組みです。


// リポジトリを作るだけで findAll() が使えるサンプル
import org.springframework.data.jpa.repository.JpaRepository;

public interface ProductRepository extends JpaRepository<Product, Long> {
    // 何も書かなくても自動で findAll() が使えるようになる
}
    

実際にデータを取り出すときは、取得した値が List<エンティティ型> として返ってきます。 例えば「全商品を画面に表示したい」といった場面では、このリストをループで回すだけで簡単に一覧表示できます。 もしデータが1件もなくても、nullではなく空のリストが返るため、 「エラーで落ちた」というような心配もありません。 最初にデータベースの中身を確認したいときや、「まずは全件を見たい」というときに役立ちます。


// 簡単な使い方のイメージ(サービスやコントローラで呼び出すだけ)
List<Product> list = productRepository.findAll();
System.out.println("取得件数: " + list.size());
    

2. findAllメソッドの主な特徴

2. findAllメソッドの主な特徴
2. findAllメソッドの主な特徴

findAllのポイントは「実装いらず」で「型安全」に「全件」を取得できることです。

  • 実装不要:継承するだけで利用可。メソッド本体やSQLを書く手間はありません。
  • 全件をList<エンティティ型>で返す:すぐにループや件数確認に使えます。
  • 0件でも空リスト:nullではなく空コレクションなので扱いやすいです。
  • 順序は未定義:並び順が必要なら並び替えを明示(別の節で対応)。
  • 学習・デバッグに最適:まずデータの全体像をつかむ入口として便利です。

// はじめの一歩:全部取って名前だけ出力
List<Product> products = productRepository.findAll(); // 実装なしで呼べる
System.out.println("件数: " + products.size());
for (Product p : products) {
    System.out.println(p.getName());
}

3. 基本的な使い方

3. 基本的な使い方
3. 基本的な使い方

実装は要りません。リポジトリを注入して findAll() を呼ぶだけです。サービス層に置く定番の形を示します。


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

@Service
public class ProductService {

    @Autowired
    private ProductRepository productRepository; // 実装クラスはSpringが用意

    @Transactional(readOnly = true)
    public List<Product> getAllProducts() {
        return productRepository.findAll(); // メソッド本体なしで利用可能
    }
}

これで全件取得の下準備は完了。あとはコントローラに渡して表示するだけです。

4. findAllメソッドの実行結果を活用する方法

4. findAllメソッドの実行結果を活用する方法
4. findAllメソッドの実行結果を活用する方法

取得したリストは「コントローラ → Model → ビュー」の順に受け渡します。ここでも実装は一切不要で、呼び出すだけです。


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

@Controller
public class ProductController {

    @Autowired
    private ProductService productService;

    @GetMapping("/products")
    public String showAllProducts(Model model) {
        List<Product> products = productService.getAllProducts(); // 呼ぶだけ
        model.addAttribute("products", products);
        model.addAttribute("count", products.size());
        model.addAttribute("hasProducts", !products.isEmpty());
        return "productList";
    }
}

画面側は、渡したproductsをそのまま繰り返し表示すればOKです。

5. ビューでのデータ表示例

5. ビューでのデータ表示例
5. ビューでのデータ表示例

件数の表示・0件メッセージ・一覧ループの3点だけ押さえれば最小構成で動きます。


<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>商品一覧</title>
</head>
<body>
    <h1>商品一覧</h1>

    <p>登録件数:<span th:text="${count}">0</span> 件</p>

    <p th:if="${!hasProducts}">現在、表示できる商品はありません。</p>

    <ul th:if="${hasProducts}">
        <li th:each="product : ${products}" th:text="${product.name}">サンプル商品名</li>
    </ul>
</body>
</html>

まずはこの形で「呼ぶだけで全件が見える」ことを体感しましょう。

6. よくある質問

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

Q: findAll()の実装を書いていないのに、なぜ動くの?

A: JpaRepositoryがデフォルト実装を提供しており、Spring Data JPAが実行時に適切なリポジトリ実装を生成してくれるためです。私たちはインターフェースを継承するだけで利用できます。

Q: 大規模データでもfindAll()を使ってよい?

A: 使えますが、全件読み込みはメモリを圧迫します。件数が多い場合はページング取得に切り替えるのが実践的です。

Q: 並び順はどう指定する?

A: 順序が必要なら findAll(Sort sort) を使います。例:productRepository.findAll(Sort.by("name").ascending())

Q: 条件を付けたい場合は?

A: findAll()は全件取得です。条件付きはクエリメソッドなどを用います(例:findByNameContaining)。

まとめ

まとめ
まとめ

Spring Data JPAのfindAllは、とても簡単な書き方でデータベースに登録されているすべての情報を取得できる便利な機能です。継承だけで利用できる点が大きな魅力で、複雑な処理を書かなくても、リポジトリにアクセスしてfindAllを呼び出すだけで完了します。とくに、初めてSpringを学ぶ人にとっては、この書き方がとても理解しやすく、学習の入口にも向いています。コントローラとサービスで呼び出せば、Spring MVCを使った画面表示にも自然につながり、Thymeleafと組み合わせた商品一覧の出力などにも簡単に対応できます。ビューではth:eachを使うことで、データベースに保存されている商品名の一覧をそのまま表示でき、件数や存在確認などの表現も分かりやすい形で扱えます。小さな開発から大きな開発まで共通で使える方法なので、商品、顧客、社員、在庫などいろいろな用途で応用できます。 さらに、findAllに加えて並び替えやフィルタリングの機能を組み合わせると、名前順、価格順、作成日順など、必要な見せ方に合わせた使い方もできます。そのうえで、データが増えてきたときのページング対応や並び順の指定も素直に利用でき、段階的な拡張がやりやすい点も安心です。 また、例外処理やエラーページとあわせて考えると、データが存在しないときにも空リストが返る仕様は安全で、余計なnullチェックが不要になるため、データがゼロ件のときにも安定した画面表示ができます。シンプルな構成で学習しながら、サービス層でのトランザクションや、コントローラでの依存注入を理解するきっかけにもなり、Springの開発における中心的な流れをつかむ手助けになります。 ここでは、findAllを利用して画面を表示する形を紹介しましたが、他のエンティティでもまったく同じように利用でき、拡張性のある柔軟な設計になっています。アプリケーションの規模が大きくなっても扱い方が変わらないため、基本さえ理解しておけば迷うことなく応用できます。

サンプルコード(振り返りの確認)

基本的なリポジトリとコントローラの形は次のようになります。


// リポジトリ
public interface ProductRepository extends JpaRepository<Product, Long> {}

// サービス
@Service
public class ProductService {
    @Autowired
    private ProductRepository productRepository;

    public List<Product> getAll() {
        return productRepository.findAll();
    }
}

// コントローラ
@Controller
public class ProductController {

    @Autowired
    private ProductService service;

    @GetMapping("/all")
    public String index(Model model) {
        List<Product> list = service.getAll();
        model.addAttribute("list", list);
        return "list";
    }
}

このように、短いコードでデータベースの中身を一覧として取り出すことができ、Thymeleafと組み合わせてテーブル表示にしてもよいし、箇条書きのリストにしてもよいです。商品、顧客、注文、社員、在庫など、どんな情報が入っていても同じ手順で利用できるので、アプリケーションの全体像を理解する手助けにもなります。成長に合わせて、検索条件を付けたいときには名前で探す、価格帯で探す、作成日で探すという形に広げられます。実践の現場ではリストの件数が増えてくることがよくあり、ページングを組み合わせて動作を軽くする方法も使えます。そういった用途でもSpring Data JPAはスムーズに対応できるため、基礎としてfindAllを理解しておくと後々便利です。 トランザクションを活用した安全な処理、リポジトリの再利用、モデルの受け渡し、ビューでの表示という一連の作業に慣れていくことで、より高度な検索やソートにも自然に対応できるようになります。大切なのは、findAllが返す値が常に空リストであること、nullにならないことです。データがゼロでも安全に画面表示までつながるため、初心者でも扱いやすい構成になっています。名前順、価格順、日付順などの並び替えにも対応できるfindAll(Sort sort)の使い方を覚えておくと、一覧の見た目を整える場面にも役立ちます。 Spring MVCやThymeleafと併用することで、画面の見た目だけではなく、コントローラとサービスとリポジトリの役割分担を学びやすくなり、保守性の高い構成が完成しやすくなります。慣れてくれば、商品を登録する画面、詳細を見る画面、条件で検索する画面も作れるようになり、業務システムでも必要とされる一般的な処理に応用できます。

ビュー側の振り返り


<ul th:if="${list}">
    <li th:each="p : ${list}" th:text="${p.name}">商品名</li>
</ul>

実際の画面では、データがゼロ件のときにはメッセージを表示し、件数があるときは繰り返し処理で表示します。登録してある商品が一覧で並ぶと、検索結果のような見え方になり、ユーザーにも分かりやすい形になります。 データベースとテンプレートエンジンの連携が分かると、一覧だけでなく詳細画面や編集画面も難しくなく、登録、更新、削除まで含めるとCRUDの基本が揃います。findAllは、その始まりとして使いやすい手順です。

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

生徒

「findAllは実装を書いていないのに動いて、とても便利だと思いました。」

先生

「そうですね。継承だけで利用できるのが大きな特徴です。Spring Data JPAが中でよい動きをしてくれています。」

生徒

「ビューでth:eachを使うと一覧が簡単に表示できて、動作確認も分かりやすかったです。」

先生

「件数や存在確認まで扱えたので、実際の画面にかなり近づきましたね。並び順やページングにも広げられるので、次のステップにも役立ちます。」

生徒

「条件で検索できるようにしてみたいです。」

先生

「クエリメソッドで名前や価格帯を探す方法もすぐに実践できるので、興味があれば挑戦してみましょう。」

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

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

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

Spring Data JPAのfindAllメソッドとは何ですか?

findAllメソッドは、Spring FrameworkとSpring Bootでデータベースアクセスを行うときに利用されるSpring Data JPAの標準機能です。JpaRepositoryインターフェースに含まれているため、特別な実装やSQLを自分で書かなくても、データベースに登録されている全てのエンティティを簡単に取得できます。MySQLやPostgreSQLなどのデータベースを使ったアプリケーションでも、findAllメソッドを呼ぶだけでデータ一覧を取得できるので、初心者でも使いやすい定番の方法です。
カテゴリの一覧へ
新着記事
JavaのHttpServletResponseWrapperを完全解説!初心者でも理解できるレスポンス処理のしくみ
JavaのScannerクラスの使い方を徹底解説!初心者でも簡単に学べる入力処理
JavaのArrayListクラスとaddメソッドを完全解説!初心者でもわかるリスト操作
Javaの@Idアノテーションを徹底解説!初心者でもわかるデータベースとの連携方法
人気記事
No.1
Java&Spring記事人気No1
Spring BootとJavaの互換性一覧!3.5/3.4/3.3はJava 21・17に対応してる?
No.2
Java&Spring記事人気No2
Javaのラムダ式で配列を扱う!Arrays.streamの基本と注意点を初心者向けに解説
No.3
Java&Spring記事人気No3
JavaのRuntimeExceptionを完全解説!初心者でもわかるjava.langパッケージの基礎
No.4
Java&Spring記事人気No4
JavaのBigDecimalクラスcompareToメソッド完全ガイド!初心者でもわかる大小比較の基本
No.5
Java&Spring記事人気No5
JavaのIntegerクラスの使い方を完全ガイド!初心者でもわかる整数操作
No.6
Java&Spring記事人気No6
Springの@Serviceアノテーションの使い方を徹底解説!初心者でもわかるSpring フレームワーク入門
No.7
Java&Spring記事人気No7
Javaの@SuppressWarningsアノテーションの使い方を完全ガイド!初心者でもわかる警告の抑制方法
No.8
Java&Spring記事人気No8
JSPとは何か?初心者向けにできること・仕組み・特徴をやさしく解説