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);
}
-
https://docs.spring.io/spring-data/data-commons/docs/current/api/org/springframework/data/repository/PagingAndSortingRepository.htmlを拡張すると、
findAll(Pageable pageable) )ページングとソートのための
および
findAll(Sort sort)
メソッド**
または、
PagingAndSortingRepository
も拡張されるので、代わりにhttps://www.baeldung.com/spring-data-repositories[
JpaRepository
]を拡張することを選択することもできます。
PagingAndSortingRepository
を拡張すると、ここで
findAllByPrice
を使用した場合と同様に、
Pageable
と
Sort
をパラメータとして使用する独自のメソッドを追加できます** 。
私たちの新しい方法を使ってあなたの商品にページ番号を付ける方法を見てみましょう。
4.ページ付け
リポジトリを
PagingAndSortingRepository
から拡張したら、次の手順を実行するだけです。
-
の実装である
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で入手可能]です。