Penomoran halaman dan Sortasi menggunakan Spring Data JPA

1. Ikhtisar

Penomoran halaman sering kali berguna saat kami memiliki kumpulan data yang besar dan kami ingin menampilkannya kepada pengguna dalam bagian yang lebih kecil.

Selain itu, kami sering kali perlu mengurutkan data tersebut dengan beberapa kriteria saat paging.

Dalam tutorial ini, kita akan belajar cara memberi nomor halaman dan mengurutkan dengan mudah menggunakan Spring Data JPA.

2. Pengaturan Awal

Pertama, katakanlah kita memiliki entitas Produk sebagai kelas domain kita:

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

Setiap instance Produk kami memiliki pengenal unik: id , namanya, dan harga yang terkait dengannya.

3. Membuat Repositori

Untuk mengakses Produk kami , kami membutuhkan ProductRepository :

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

Dengan membuatnya memperluas PagingAndSortingRepository , kita mendapatkan metode findAll (Pageable pageable) dan findAll (Sort sort) untuk paging dan sortir.

Sebaliknya, kita dapat memilih untuk memperluas JpaRepository , karena ia juga memperluas PagingAndSortingRepository .

Setelah kami memperluas PagingAndSortingRepository , kami dapat menambahkan metode kami sendiri yang menggunakan Pageable dan Sortir sebagai parameter , seperti yang kami lakukan di sini dengan findAllByPrice .

Mari kita lihat bagaimana cara membuat nomor Produk kita menggunakan metode baru kita.

4. Penomoran halaman

Setelah kita memiliki repositori yang diperluas dari PagingAndSortingRepository , kita hanya perlu:

  1. Buat atau dapatkan objek PageRequest , yang merupakan implementasi antarmuka Pageable
  2. Teruskan objek PageRequest sebagai argumen ke metode repositori yang ingin kita gunakan

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

Di sini jumlah halaman dimulai dari nol:

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

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

Setelah kita memiliki objek PageRequest , kita bisa meneruskannya sambil menjalankan metode repositori kita:

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

Metode findAll (Pageable pageable) secara default mengembalikan objek Page .

Namun, kita bisa memilih untuk kembali baik Page, sebuah Iris, atau Daftar dari salah metode kebiasaan kami kembali data paginasi .

Contoh Halaman , selain memiliki daftar Produk , juga mengetahui tentang jumlah halaman yang tersedia. Ini memicu kueri hitungan tambahan untuk mencapainya. Untuk menghindari biaya overhead seperti itu, kita dapat mengembalikan Slice atau List .

Sebuah Iris hanya tahu apakah slice berikutnya tersedia atau tidak.

5. Penomoran halaman dan Penyortiran

Demikian pula, agar hasil kueri kita diurutkan, kita cukup meneruskan instance Sort ke metode:

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

Namun, bagaimana jika kita ingin menyortir dan halaman data kita?

Kita dapat melakukannya dengan meneruskan detail pengurutan ke dalam objek PageRequest itu 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 persyaratan pengurutan, kita dapat menentukan bidang pengurutan dan arah pengurutan saat membuat instance PageRequest .

Seperti biasa, kita kemudian dapat meneruskan instance tipe Pageable ini ke metode repositori.

6. Kesimpulan

Di artikel ini, kami mempelajari cara memberi nomor halaman dan mengurutkan hasil kueri kami di Spring Data JPA.

Seperti biasa, contoh kode lengkap yang digunakan dalam artikel ini tersedia di Github.