実施形態の方法
Paginationとは?
上記のUI要素を「ページネーミング」と呼びます.多くのデータ・リストは、一度にロードおよび表示するのが難しいため、その一部のみを取得して表示できます.このため、データベースに格納されているデータを切り取ることを「ページング」と呼びます.
ページ番号
「1ページあたり出力するデータ数」
「画面下部に印刷するページサイズ」
キーワードの検索
検索タイプ
などなど.
ページ名に必要な情報は非常に多い場合があります.しかし,この論文では,ページ番号(page)と,1ページ当たりの出力データ数(size)のみを考慮したページングについて論じる.
どのように実現しますか?
もちろん、データベースからすべてのデータ(select*from table)を取得し、メモリで順番に切断し、希望するデータのみを選択できますが、説明するページング方法は、データベースで希望するデータのみをクエリーすることです.
方法は本当に多様だ.しかし、この投稿は筆者が理解した内容だけを記録している.
1.クエリーを直接作成して飛ばす
2.Spring-Data-JPAの使用
LIMITを使用したクエリーの直接作成(mysql)
MySQLでは、LIMIT構文は、データが欲しいだけデータを取得するために使用されます.
LIMITの最初のパラメータは開始位置を指定し、2番目のパラメータはインポートするデータの個数を指定します.
したがって、私たちが望んでいるデータは
LIMIT (page-1)*size, size
です.すなわち、pageおよびsizeが与えられたときに
SELECT * FROM table LIMIT (page-1)*size, size
クエリが発行されると、必要なデータのみが抽出される.page=5、size=10のクエリ例
(springサーバでin-memory h 2 dbを解放し、コンソールに直接入力します.)
Spring Data Jpaの使用
Spring Data Jpaの使用
Pageableとは?(ft. PageRequest)
インターフェイス!
Spring Data Jpaで定義されている転送可能なインタフェースには、次の簡単な説明があります.
これはPageableがPagination要求情報を含む抽象インタフェースであることを意味する.実際に使用するためには、実施体が必要で、もちろん準備ができています.
(実はこれもめんどくさいし、スプリング製作の道具もあるので、これも結構…)
クエリメソッドとともに書き込み
Pageとsize情報を使用して折り畳み可能なオブジェクトを作成したとしたら、クエリーメソッドとともに使用しましょう.
JPA RepositoryとCrudRepositoryの間のPaging And Sorting Repositoryでは、Pageableをパラメータとする方法が宣言されている.
これはJpa Repositoryが継承し、これも私たちのCustom Repositoryが継承して使用します.
//User 테이블을 페이징하는 메서드
@Repository
public interface UserRepository extends JpaRepository<User, Long> {
Page<User> findAll(Pageable pageable);
}
(メソッド定義はorg.springframework.data.jpa.repository.support.SimpleJpaRepository.java
で......ああ)要求からPageableオブジェクトを作成
やっとPageableオブジェクトを直接作成できるようになりました
クエリー・パラメータがpageとsizeの場合、次の方法でページング可能なオブジェクトを作成できます.
protected PageRequest(int page, int size, Sort sort) {
super(page, size);
Assert.notNull(sort, "Sort must not be null!");
this.sort = sort;
}
public static PageRequest of(int page, int size) {
return of(page, size, Sort.unsorted());
}
public static PageRequest of(int page, int size, Sort sort) {
return new PageRequest(page, size, sort);
}
public static PageRequest of(int page, int size, Direction direction, String... properties) {
return of(page, size, Sort.by(direction, properties));
}
// 사용 예시
Page<Entity> pleaseGiveMePages(int page, int size) {
Pageable pageable = PageRequest.of(page,size);
Page<Entity> page = entityRepository.findAll(pageable);
return page;
}
もっと知っていればもっといいです。
Reference
この問題について(実施形態の方法), 我々は、より多くの情報をここで見つけました https://velog.io/@chlee4858/Jpa-Pagination-구현하기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol