Spring Data JPAによるページングとソート
5137 ワード
概観
大量のデータを処理する場合、遅延処理は通常不可欠である.サービスが大量のデータを返しても、消費者はそれを使用することはできません.ショッピングサイトを考慮すると、お客様はこのサイトで製品を検索し、数千種類の製品を展示することができます.数千種類の製品を入手し、Webページに表示するには時間がかかります.ほとんどの場合、お客様はすべての製品を表示しない場合があります.
この場合、ページングと呼ばれる技術が用いられる.まず、製品(ページ)の一部のみが表示され、次のサブセット(ページ)などを表示するように要求できます.
JPAとSpring Data JPAの基礎知識については、次のリンクを参照してください.
エンティティ
このチュートリアルの目的のために、Employeeエンティティの最も簡単な例を考慮します.次はEmployeeエンティティクラスです.
@Entity public class Employee { @Id private Long name; private String firstName; private String lastName; private Date dateOfBirth; private Integer age; private String designation; private double salary; private Date dateOfJoining; public Long getName() { return name; } public void setName(Long name) { this.name = name; } public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } public Date getDateOfBirth() { return dateOfBirth; } public void setDateOfBirth(Date dateOfBirth) { this.dateOfBirth = dateOfBirth; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public String getDesignation() { return designation; } public void setDesignation(String designation) { this.designation = designation; } public double getSalary() { return salary; } public void setSalary(double salary) { this.salary = salary; } public Date getDateOfJoining() { return dateOfJoining; } public void setDateOfJoining(Date dateOfJoining) { this.dateOfJoining = dateOfJoining; } }
SpringとSpring BootでJava Persistence API(JPA)を使用する方法について知りたいですか?次のリンクを表示します.
従業員リポジトリ
Spring Data JPAクエリー・メソッドについては、Springリポジトリ・インタフェースとクエリー・メソッドについて説明しています.ここでは、ページングを学ぶ必要があるので、Spring PagingAndSortingRepositoryを使用します.
@Repository public interface EmployeeRepository extends PagingAndSortingRepository { Page findAll(Pageable pageable); Page findByFirstName(String firstName, Pageable pageable); Slice findByFirstNameAndLastName(String firstName, String lastName, Pageable pageable); }
ページング
見てみろEmployeeRepository.このメソッドはPageableパラメータを受け入れます.PageableはSpringによって定義されたインタフェースで、PageRequestを持っています.PageRequestを作成する方法を見てみましょう.
Pageable pageable = PageRequest.of(0, 10); Page page = employeeRepository.findAll(pageable);
最初の行では、PageRequestの従業員10人を作成し、最初のページ(0)を指定するように要求しました.ページ要求findAllが渡され、Employeesページが応答として取得されます.
次のページのセットにアクセスしたい場合は、毎回ページ番号を増やすことができます.
PageRequest.of(1, 10); PageRequest.of(2, 10); PageRequest.of(3, 10); ...
ツールバーの
Spring Data JPAは、ソートメカニズムを提供するためにSortオブジェクトを提供します.ソート方法を見てみましょう.
employeeRepository.findAll(Sort.by("fistName")); employeeRepository.findAll(Sort.by("fistName").ascending().and(Sort.by("lastName").descending());
最初はfirstName、もう1つはfirstNameの昇順とlastNameの降順で並べ替えられていることは明らかです.
改ページとソート
Pageable pageable = PageRequest.of(0, 20, Sort.by("firstName")); Pageable pageable = PageRequest.of(0, 20, Sort.by("fistName").ascending().and(Sort.by("lastName").descending());
スライスとページ
EmployeeRepositoryでは、1つのメソッドがSliceを返し、もう1つのメソッドがPageを返します.いずれもSpring Data JPAで、PageはサブインタフェースSliceです.これらは、データのサブセットを保存および戻すために使用されます.一つ一つ見てみましょう
スライス
Sliceは、コンテンツがあれば、最初のスライスまたは最後のスライスであることを知っています.また、Pageableの現在および以前のスライスで使用されているものを返すこともできます.いくつかの重要な方法Sliceを見てみましょう.
List getContent(); // get content of the slice Pageable getPageable(); // get current pageable boolean hasContent(); boolean isFirst(); boolean isLast(); Pageable nextPageable(); // pageable of the next slice Pageable previousPageable(); // pageable of the previous slice
ページ
Pageはサブインタフェースで、Sliceにはいくつかの追加の方法があります.テーブルの合計ページ数とレコードの合計数がわかります.以下はいくつかの重要な方法Pageです.
static Page empty; //create an empty page long getTotalElements(); // number of total elements in the table int totalPages() // number of total pages in the table
サマリ
Spring Data JPAを使用するページングとソートの例では、ページングが必要な理由について説明します.また,ページングとソートのデータサブセットの取得方法も学習した.最後に,SliceとPageインタフェース,およびそれらの相違も見た.
また、私はオンライン教育に従事して長年、自分の資料を統合して1つの公衆番号を建てて、興味があって一緒にjavaを交流して勉強することに対して微信で検索することができます:“プログラマー文明”、中には大神が解答を与えることができて、多くの資源がみんなに勉強して分かち合うことができて、みんなが一緒に勉強して進歩することを歓迎します!