Spring Data JPAを使用したページ区切りとソート

データ]

1.概要

私たちが大きなデータセットを持っていて、それをより小さな塊でユーザーに見せたいときに、ページ付けはしばしば役に立ちます。

また、ページング中にいくつかの基準でそのデータを並べ替える必要があることもよくあります。

このチュートリアルでは、Spring Data JPAを使用して簡単にページ分割およびソートする方法を学習します。

2.初期設定

まず、 Product エンティティがあるとしましょう。

@Entity
public class Product {

    @Id
    private long id;
    private String name;
    private double price;

   //constructors, getters and setters

}

私たちのドメインクラスとして。 Product インスタンスにはそれぞれ一意の識別子( id 、その name 、およびそれに関連付けられた price )があります。

3.リポジトリを作成する

__Product sにアクセスするには、 ProductRepository__が必要です。

public interface ProductRepository extends PagingAndSortingRepository<Product, Integer> {

    List<Product> findAllByPrice(double price, Pageable pageable);
}

または、 PagingAndSortingRepository も拡張されるので、代わりにhttps://www.baeldung.com/spring-data-repositories[ JpaRepository ]を拡張することを選択することもできます。

PagingAndSortingRepository を拡張すると、ここで findAllByPrice を使用した場合と同様に、 Pageable Sort をパラメータとして使用する独自のメソッドを追加できます** 。

私たちの新しい方法を使ってあなたの商品にページ番号を付ける方法を見てみましょう。

4.ページ付け

リポジトリを PagingAndSortingRepository から拡張したら、次の手順を実行するだけです。

  1. の実装である PageRequest オブジェクトを作成または取得します.

Pageable インタフェース 。 PageRequest オブジェクトをリポジトリメソッドの引数として渡します。

使用予定

要求されたページ番号とページサイズを渡すことで PageRequest オブジェクトを作成できます。

ここでは、** ページ数はゼロから始まります。

Pageable firstPageWithTwoElements = PageRequest.of(0, 2);

Pageable secondPageWithFiveElements = PageRequest.of(1, 5);

Spring MVCでは、https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#core.webを使用して Pageable インスタンスを取得することもできます。]。

PageRequest オブジェクトを取得したら、リポジトリのメソッドを呼び出しながらそれを渡すことができます。

Page<Product> allProducts = productRepository.findAll(firstPageWithTwoElements);

List<Product> allTenDollarProducts =
  productRepository.findAllByPrice(10, secondPageWithFiveElements);

findAll(Pageable pageable) メソッドは、デフォルトで Page <T> オブジェクトを返します。

ただし、** ページ付けされたデータを返す任意のカスタムメソッドから Page <T>、 aSlice <T>、または__List <T>を返すことができます。

Page <T> インスタンスは、 __Product のリストを持つことに加えて、利用可能なページの総数についても知っています。 ** それはそれを達成するために追加のcountクエリを引き起こします。そのような間接費を避けるために、代わりに Slice <T> または List <T> __を返すことができます。

Slice は次のスライスが利用可能かどうかだけを知ります。

5.ページ付けとソート

同様に、クエリの結果をソートするには、https://www.baeldung.com/spring-data-sorting[ Sort ]のインスタンスをメソッドに渡すだけです。

Page<Product> allProductsSortedByName = productRepository.findAll(Sort.by("name"));

しかし、データのソートとページングの両方を行いたい場合はどうしますか。

それを行うには、ソートの詳細を PageRequest オブジェクト自体に渡します。

Pageable sortedByName =
  PageRequest.of(0, 3, Sort.by("name"));

Pageable sortedByPriceDesc =
  PageRequest.of(0, 3, Sort.by("price").descending());

Pageable sortedByPriceDescNameAsc =
  PageRequest.of(0, 5, Sort.by("price").descending().and(Sort.by("name")));

ソート要件に基づいて、 PageRequest インスタンスを作成しながら** ソートフィールドとソート方向を指定できます。

通常通り、この Pageable 型のインスタンスをリポジトリのメソッドに渡すことができます。

6.まとめ

この記事では、Spring Data JPAでクエリ結果をページ分割およびソートする方法を学びました。

いつものように、このチュートリアルで使用されている完全なコード例はhttps://github.com/eugenp/tutorials/tree/master/persistence-modules/spring-data-jpa[Githubで入手可能]です。