データ]

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で入手可能]です。