Penomboran dan Pengisihan menggunakan Spring Data JPA

1. Gambaran keseluruhan

Pagination sering kali berguna apabila kita mempunyai set data yang besar dan kita ingin membentangkannya kepada pengguna dalam potongan yang lebih kecil.

Juga, kita sering perlu menyusun data tersebut dengan beberapa kriteria semasa melakukan paging.

Dalam tutorial ini, kita akan belajar cara membuat halaman dan mengasingkan dengan mudah menggunakan Spring Data JPA.

2. Persediaan Awal

Pertama, katakan kita mempunyai entiti Produk sebagai kelas domain kita:

@Entity public class Product { @Id private long id; private String name; private double price; // constructors, getters and setters }

Setiap contoh Produk kami mempunyai pengecam unik: id , nama dan harganya yang berkaitan dengannya.

3. Membuat Repositori

Untuk mengakses Produk kami , kami memerlukan ProductRepository :

public interface ProductRepository extends PagingAndSortingRepository { List findAllByPrice(double price, Pageable pageable); }

Dengan memperluas PagingAndSortingRepository , kita mendapat kaedah findAll (Pageable pageable) dan findAll (Sort sort) untuk paging dan menyusun.

Sebaliknya, kita boleh memilih untuk memperluas JpaRepository sebagai gantinya, seperti juga memperluas PagingAndSortingRepository .

Setelah kami memperluas PagingAndSortingRepository , kami dapat menambahkan kaedah kami sendiri yang mengambil Pageable dan Sort sebagai parameter , seperti yang kami lakukan di sini dengan findAllByPrice .

Mari kita lihat bagaimana cara menghaluskan Produk kita menggunakan kaedah baru kita.

4. Penomboran

Setelah repositori kami diperluas dari PagingAndSortingRepository , kita hanya perlu:

  1. Buat atau dapatkan objek PageRequest , yang merupakan implementasi antara muka Pageable
  2. Lulus objek PageRequest sebagai argumen ke kaedah repositori yang ingin kami gunakan

Kita dapat membuat objek PageRequest dengan memasukkan nombor halaman yang diminta dan ukuran halaman.

Di sini jumlah halaman bermula pada sifar:

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

Di Spring MVC, kami juga dapat memilih untuk mendapatkan instance Pageable di pengawal kami menggunakan Spring Data Web Support.

Setelah kami mempunyai objek PageRequest , kami dapat meneruskannya sambil menggunakan kaedah repositori kami:

Page allProducts = productRepository.findAll(firstPageWithTwoElements); List allTenDollarProducts = productRepository.findAllByPrice(10, secondPageWithFiveElements);

Kaedah findAll (Pageable pageable) secara lalai mengembalikan objek Halaman .

Walau bagaimanapun, kita boleh memilih untuk kembali sama ada Page, yang Slice, atau Senarai dari mana-mana kaedah adat kami kembali data paginated .

Contoh Halaman , selain memiliki daftar Produk , juga mengetahui tentang jumlah halaman yang tersedia. Ini mencetuskan pertanyaan kiraan tambahan untuk mencapainya. Untuk mengelakkan kos overhead, kita boleh mengembalikan Slice atau List .

A Slice sahaja yang tahu sama ada keping yang berikut ada atau tidak.

5. Penomboran dan Pengisihan

Begitu juga, agar hasil pertanyaan kami disusun, kita hanya boleh menyampaikan contoh Urutkan ke kaedah:

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

Namun, bagaimana jika kita mahu menyusun dan menyusun data kita?

Kita boleh melakukannya dengan memasukkan butiran penyortiran ke objek PageRequest kita sendiri:

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")));

Berdasarkan keperluan penyortiran kami, kami dapat menentukan bidang urutan dan arah urutan semasa membuat contoh PageRequest kami .

Seperti biasa, kita kemudian dapat meneruskan contoh jenis Halaman ini ke kaedah repositori.

6. Kesimpulannya

Dalam artikel ini, kami belajar cara membuat muka surat dan menyusun hasil pertanyaan kami di Spring Data JPA.

Seperti biasa, contoh kod lengkap yang digunakan dalam artikel ini terdapat di Github.