Paginering og sortering ved hjælp af Spring Data JPA

1. Oversigt

Pagination er ofte nyttigt, når vi har et stort datasæt, og vi vil præsentere det for brugeren i mindre stykker.

Vi er også ofte nødt til at sortere disse data efter nogle kriterier, mens vi søger.

I denne vejledning vi lærer, hvordan man let kan paginere og sortere ved hjælp af Spring Data JPA.

2. Første opsætning

Lad os først sige, at vi har en Produkt enhed som vores domæneklasse:

@Entity offentlig klasse produkt {@Id privat langt id; privat strengnavn; privat dobbelt pris; // konstruktører, getters og settere}

Hver af vores Produkt forekomster har en unik identifikator: id, dens navn ogdet er pris forbundet med det.

3. Oprettelse af et arkiv

For at få adgang til vores Produkts, vi har brug for en ProductRepository:

offentlig grænseflade ProductRepository udvider PagingAndSortingRepository {Liste findAllByPrice (dobbelt pris, Pageable pageable); }

Ved at have det udvidePagingAndSortingRepository, vi får findAll (Pageable pageable) og findAll (Sort sort) metoder til personsøgning og sortering.

Omvendt kunne vi have valgt at udvide JpaRepository i stedet, som det strækker sig PagingAndSortingRepository også.

Når vi strækker os ud PagingAndSortingRepository, vi kan tilføje vores egne metoder, der tager Sidelig og Sortere som parametre, som vi gjorde her med findAllByPrice.

Lad os se på, hvordan vi kan paginere vores Produkts bruger vores nye metode.

4. Paginering

Når vi har vores lager, der strækker sig fra PagingAndSortingRepository, vi skal bare:

  1. Opret eller få en PageRequest objekt, som er en implementering af Sidelig interface
  2. Gå forbi PageRequest objekt som et argument for den arkivmetode, vi agter at bruge

Vi kan oprette en PageRequest objekt ved at angive det ønskede sidetal og sidestørrelsen.

Her sidetællingen starter ved nul:

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

I Spring MVC kan vi også vælge at få Sidelig forekomst i vores controller ved hjælp af Spring Data Web Support.

Når vi har vores PageRequest objekt, kan vi sende det ind, mens vi påberåber vores arkivs metode:

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

Det findAll (Pageable pageable) metode returnerer som standard a Side objekt.

Imidlertid, vi kan vælge at returnere enten a Side, -en Skive, eller a Liste fra en af ​​vores brugerdefinerede metoder, der returnerer paginerede data.

EN Side eksempel ud over at have listen over Produkts, kender også det samlede antal tilgængelige sider. Det udløser en yderligere optællingsforespørgsel for at opnå det. For at undgå sådanne omkostninger kan vi i stedet returnere en Skive eller a Liste.

EN Skive ved kun, om det næste udsnit er tilgængeligt eller ej.

5. Paginering og sortering

På samme måde kan vi bare videregive en forekomst af for at få sorteret vores forespørgselsresultater Sortere til metoden:

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

Men hvad hvis vi vil både sortere og side vores data?

Vi kan gøre det ved at videregive sorteringsoplysningerne til vores PageRequest selve objektet:

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

Baseret på vores sorteringskrav, vi kan specificere sorteringsfelterne og sorteringsretningen mens du opretter vores PageRequest eksempel.

Som sædvanlig kan vi derefter videregive dette Sidelig skriv instans til arkivets metode.

6. Konklusion

I denne artikel lærte vi at paginere og sortere vores forespørgselsresultater i Spring Data JPA.

Som altid er de komplette kodeeksempler, der bruges i denne artikel, tilgængelige på Github.