Paginacija i sortiranje pomoću Spring Data JPA

1. Pregled

Paginacija je često korisna kada imamo velik skup podataka i želimo ga predstaviti korisniku u manjim dijelovima.

Također, često moramo sortirati te podatke prema nekim kriterijima tijekom straničenja.

U ovom vodiču, naučit ćemo kako lako paginirati i sortirati pomoću Spring Data JPA.

2. Početno postavljanje

Prvo, recimo da imamo Proizvod entitet kao naša klasa domene:

@ Entitet javne klase Proizvod {@ Id privatni dugi ID; privatni naziv niza; privatna dvostruka cijena; // konstruktori, getteri i postavljači}

Svaka naša Proizvod instances ima jedinstveni identifikator: iskaznica, svoje Ime I je cijena povezano s tim.

3. Stvaranje spremišta

Za pristup našem Proizvods, trebat će nam Spremište proizvoda:

javno sučelje ProductRepository proširuje PagingAndSortingRepository {List findAllByPrice (dvostruka cijena, na stranici se može stranicati); }

Tako što će se produžitiPagingAndSortingRepository, shvaćamo findAll (dostupno za stranicu) i findAll (sortiranje sortiraj) metode straničenja i sortiranja.

Suprotno tome, mogli smo odabrati produženje JpaRepository umjesto toga, kako se proteže PagingAndSortingRepository isto.

Jednom kad produžimo PagingAndSortingRepository, možemo dodati vlastite metode koje uzimaju Pageable i Vrsta kao parametri, kao što smo to učinili ovdje s findAllByPrice.

Pogledajmo kako paginirati naš Proizvods pomoću naše nove metode.

4. Paginacija

Jednom kada se naše spremište proširi od PagingAndSortingRepository, samo trebamo:

  1. Stvorite ili nabavite a Zahtjev za stranicu objekt, što je provedba Pageable sučelje
  2. Prođi Zahtjev za stranicu objekt kao argument za metodu spremišta koju namjeravamo koristiti

Možemo stvoriti Zahtjev za stranicu objekt unošenjem traženog broja stranice i veličine stranice.

Ovdje broj stranica počinje na nuli:

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

U proljetnom MVC-u možemo odabrati i Pageable primjer u našem kontroleru pomoću Spring Data Web Support.

Jednom kad imamo svoje Zahtjev za stranicu objekt, možemo ga predati dok pozivamo metodu našeg spremišta:

Stranica allProducts = productRepository.findAll (firstPageWithTwoElements); Navedite allTenDollarProducts = productRepository.findAllByPrice (10, secondPageWithFiveElements);

The findAll (dostupno za stranicu) metoda po defaultu vraća a Stranica objekt.

Međutim, možemo odabrati vratiti bilo a Stranica, a Kriška, ili a Popis iz bilo koje od naših prilagođenih metoda za vraćanje paginiranih podataka.

A Stranica primjerice, pored toga što ima popis Proizvods, također zna o ukupnom broju dostupnih stranica. Pokreće dodatni upit za brojanje kako bi ga postigao. Da bismo izbjegli takve režijske troškove, umjesto toga možemo vratiti a Kriška ili a Popis.

A Kriška samo zna je li sljedeća kriška dostupna ili ne.

5. Paginacija i sortiranje

Slično tome, da bismo samo sortirali rezultate upita, možemo jednostavno proslijediti instancu Vrsta na metodu:

Stranica allProductsSortedByName = productRepository.findAll (Sort.by ("ime"));

Međutim, što ako to želimo i sortirati i prelistati naše podatke?

To možemo učiniti prosljeđivanjem detalja sortiranja u naš Zahtjev za stranicu sam objekt:

Pageable sortedByName = PageRequest.of (0, 3, Sort.by ("ime")); Pageable sortedByPriceDesc = PageRequest.of (0, 3, Sort.by ("cijena"). Silazno ()); Pageable sortedByPriceDescNameAsc = PageRequest.of (0, 5, Sort.by ("cijena"). Silazno (). I (Sort.by ("ime")));

Na temelju naših zahtjeva za sortiranje, možemo odrediti polja sortiranja i smjer sortiranja dok stvaramo našu Zahtjev za stranicu primjer.

Kao i obično, to možemo proći Pageable upišite instancu u metodu spremišta.

6. Zaključak

U ovom smo članku naučili kako paginirati i sortirati rezultate upita u Spring Data JPA.

Kao i uvijek, cjeloviti primjeri koda korišteni u ovom članku dostupni su na Githubu.