Paginering og sortering ved hjelp av vårdata JPA

1. Oversikt

Paginering er ofte nyttig når vi har et stort datasett, og vi vil presentere det for brukeren i mindre biter.

Vi trenger også ofte å sortere dataene etter noen kriterier mens vi søker.

I denne veiledningen, vi lærer hvordan vi enkelt kan paginere og sortere ved hjelp av Spring Data JPA.

2. Første oppsett

La oss først si at vi har en Produkt enhet som vår domeneklasse:

@Entity offentlig klasse Produkt {@Id privat lang id; privat strengnavn; privat dobbel pris; // konstruktører, getters og setters}

Hver av våre Produkt forekomster har en unik identifikator: id, det er Navn og dets pris assosiert med det.

3. Opprette et depot

For å få tilgang til vår Produkts, vi trenger en ProductRepository:

offentlig grensesnitt ProductRepository utvider PagingAndSortingRepository {List findAllByPrice (dobbel pris, Pageable pageable); }

Ved å ha det utvidePagingAndSortingRepository, vi får findAll (Pageable pageable) og findAll (Sort sort) metoder for personsøking og sortering.

Omvendt kunne vi ha valgt å utvide JpaRepository i stedet, når det strekker seg PagingAndSortingRepository også.

Når vi forlenger PagingAndSortingRepository, vi kan legge til våre egne metoder som tar Sidelig og Sortere som parametere, som vi gjorde her med findAllByPrice.

La oss ta en titt på hvordan vi kan paginere våre Produkts bruker vår nye metode.

4. Paginering

Når vi har vårt depot som strekker seg fra PagingAndSortingRepository, vi trenger bare å:

  1. Opprette eller skaffe en PageRequest objekt, som er en implementering av Sidelig grensesnitt
  2. Send meg PageRequest objekt som et argument mot depotmetoden vi har tenkt å bruke

Vi kan lage en PageRequest objekt ved å sende inn det etterspurte sidetallet og sidestørrelsen.

Her sidetellingen starter på null:

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

På våren MVC kan vi også velge å få tak i Sidelig forekomst i kontrolleren vår ved hjelp av Spring Data Web Support.

Når vi har fått vår PageRequest objekt, kan vi sende det inn mens vi påkaller lagringsmetoden vår:

Side allProducts = productRepository.findAll (firstPageWithTwoElements); Liste allTenDollarProducts = productRepository.findAllByPrice (10, secondPageWithFiveElements);

De findAll (Pageable pageable) metoden returnerer som standard a Side gjenstand.

Derimot, vi kan velge å returnere enten a Side, en Skjære, eller a Liste fra noen av våre tilpassede metoder som returnerer paginerte data.

EN Side eksempel, i tillegg til å ha listen over Produkts, vet også om det totale antallet tilgjengelige sider. Det utløser et ekstra tellingsspørsmål for å oppnå det. For å unngå en slik overheadkostnad, kan vi i stedet returnere en Skjære eller a Liste.

EN Skjære vet bare om neste stykke er tilgjengelig eller ikke.

5. Paginering og sortering

På samme måte, for å bare sortere våre søkeresultater, kan vi ganske enkelt sende en forekomst av Sortere til metoden:

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

Men hva om vi vil både sortere og side våre data?

Vi kan gjøre det ved å sende sorteringsdetaljene inn i vår PageRequest selve objektet:

Sidesortert sortedByName = PageRequest.of (0, 3, Sort.by ("navn")); Sidesortert sortedByPriceDesc = PageRequest.of (0, 3, Sort.by ("pris"). Synkende ()); Sidesortert sortedByPriceDescNameAsc = PageRequest.of (0, 5, Sort.by ("pris"). Synkende (). Og (Sort.by ("navn")));

Basert på våre sorteringskrav, vi kan spesifisere sorteringsfeltene og sorteringsretningen mens du lager vår PageRequest forekomst.

Som vanlig kan vi da passere dette Sidelig skriv forekomst til depotets metode.

6. Konklusjon

I denne artikkelen lærte vi hvordan vi kan paginere og sortere våre søkeresultater i Spring Data JPA.

Som alltid er de komplette kodeeksemplene som brukes i denne artikkelen tilgjengelig på Github.


$config[zx-auto] not found$config[zx-overlay] not found