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:
- Stvorite ili nabavite a Zahtjev za stranicu objekt, što je provedba Pageable sučelje
- 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.