Paginering en sortering met Spring Data JPA

1. Overzicht

Paginering is vaak handig als we een grote dataset hebben en we deze in kleinere delen aan de gebruiker willen presenteren.

We moeten die gegevens ook vaak sorteren op basis van een aantal criteria tijdens het bladeren.

In deze tutorial we zullen leren hoe u gemakkelijk kunt pagineren en sorteren met Spring Data JPA.

2. Eerste installatie

Laten we eerst zeggen dat we een Product entiteit als onze domeinklasse:

@Entity public class Product {@Id privé lange id; private String naam; particuliere dubbele prijs; // constructeurs, getters en setters}

Elk van onze Product instanties heeft een unieke identificatie: ID kaart, zijn naam en zijn prijs ermee geassocieerd.

3. Creëren van een repository

Om toegang te krijgen tot onze Products, we hebben een Productopslagplaats:

openbare interface ProductRepository breidt PagingAndSortingRepository {List findAllByPrice uit (dubbele prijs, pageable pageable); }

Door het te laten verlengenPagingAndSortingRepository, we krijgen findAll (pageable pageable) en findAll (Sorteren sorteren) methoden voor bladeren en sorteren.

Omgekeerd hadden we ervoor kunnen kiezen om uit te breiden JpaRepository in plaats daarvan, terwijl het zich uitbreidt PagingAndSortingRepository te.

Zodra we verlengen PagingAndSortingRepository, we kunnen onze eigen methoden toevoegen die nemen Pageable en Soort als parameters, zoals we hier deden findAllByPrice.

Laten we eens kijken hoe u onze Products met behulp van onze nieuwe methode.

4. Paginering

Zodra we onze repository hebben die zich uitstrekt van PagingAndSortingRepository, we hoeven alleen maar:

  1. Maak of verkrijg een PageRequest object, wat een implementatie is van het Pageable koppel
  2. Geef de PageRequest object als argument voor de repository-methode die we willen gebruiken

We kunnen een PageRequest object door het gevraagde paginanummer en het paginaformaat door te geven.

Hier het aantal pagina's begint bij nul:

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

In Spring MVC kunnen we er ook voor kiezen om het Pageable bijvoorbeeld in onze controller met behulp van Spring Data Web Support.

Zodra we onze hebben PageRequest object, kunnen we het doorgeven terwijl we de methode van onze repository aanroepen:

Pagina allProducts = productRepository.findAll (firstPageWithTwoElements); Lijst allTenDollarProducts = productRepository.findAllByPrice (10, secondPageWithFiveElements);

De findAll (pageable pageable) methode retourneert standaard een Bladzijde voorwerp.

Echter, we kunnen ervoor kiezen om ofwel een Bladzijde, een Plak, of een Lijst van een van onze aangepaste methoden die gepagineerde gegevens retourneren.

EEN Bladzijde bijvoorbeeld, naast het hebben van de lijst met Products, weet ook van het totale aantal beschikbare pagina's. Het activeert een extra telquery om dit te bereiken. Om dergelijke overheadkosten te vermijden, kunnen we in plaats daarvan een Plak of een Lijst.

EEN Plak weet alleen of de volgende plak beschikbaar is of niet.

5. Paginering en sortering

Evenzo, om alleen onze queryresultaten te sorteren, kunnen we eenvoudig een exemplaar van Soort naar de methode:

Pagina allProductsSortedByName = productRepository.findAll (Sort.by ("naam"));

Maar wat als we dat willen zowel sorteren als pagineren onze gegevens?

Dat kunnen we doen door de sorteergegevens door te geven aan ons PageRequest object zelf:

Pageable gesorteerdByName = PageRequest.of (0, 3, Sort.by ("naam")); Pageable gesorteerdByPriceDesc = PageRequest.of (0, 3, Sort.by ("prijs"). Aflopend ()); Pageable gesorteerdByPriceDescNameAsc = PageRequest.of (0, 5, Sort.by ("prijs"). Aflopend (). En (Sort.by ("naam")));

Op basis van onze sorteervereisten, we kunnen de sorteervelden en de sorteerrichting specificeren tijdens het maken van onze PageRequest voorbeeld.

Zoals gewoonlijk kunnen we dit dan doorgeven Pageable typ instance naar de methode van de repository.

6. Conclusie

In dit artikel hebben we geleerd hoe we onze queryresultaten kunnen pagineren en sorteren in Spring Data JPA.

Zoals altijd zijn de volledige codevoorbeelden die in dit artikel worden gebruikt, beschikbaar op Github.