Wie die Umsetzung der Paginierung in den Frühling starten mit hibernate
Bin ich mit spring boot mit hibernate und ich will Paginierung in meinem Projekt. Ich habe in google gesucht und sah viele Beispiele, aber ich bin nicht in der Lage, Sie zu implementieren, in meinem Projekt.
Ich möchte gerne, wenn ich übergeben Sie 1 in meiner url dann 10-Ergebnissen kommen soll, und wenn ich vorbeigehe, 2 dann die nächsten 10 Ergebnisse kommen sollten und so weiter.
Hier ist mein mein Dao
@Transactional
public interface PostDao extends CrudRepository<Post, Long>{
@Query(getAllPostsByRank)
List<Post> getAllPostsByRank();
final String getAllPostsByRank= "from Post order by value DESC";
}
Hier ist mein Controller
@RequestMapping("/top")
@ResponseBody
public List<Post> getAllPosts(HttpServletRequest req, HttpServletResponse res) throws ServletException {
List<Post> postobj = postDao.getAllPostsByRank();
return postobj;
}
Und hier ist mein url:
http://localhost:8888/v1.0/post/top/1
Bitte vorschlagen.
- haben Sie versucht, PagingAndSortingRepository? (docs.Frühling.io/spring-data/data-commons/docs/1.6.1.RELEASE/...)
- Nein nicht versuchen.. weil nicht in der Lage zu verstehen, wie ich bin neu in spring boot
- Bearbeiten können Sie meinen code bitte.
- möglich, Duplikat der Benutzerdefinierte Abfrage in Spring JPA-Repository mit Seitenzahlen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Überprüfen. Ihr controller
Ihre dao
from Foo order by id DESC
und es warf eine exception beim Start. es nicht mitfrom Foo f order by id DESC
.Ich würde prüfen, mit
org.springframework.data.domain.Pageable
direkt in den controller. Dieses Objekt kann übergeben werden, um Ihre JPA-layer, wo es sich um die Anzahl der zurückgegebenen Ergebnisse und die Größe.Die große Sache über die Verwendung von
Pageable
ist, dass es gibt einePage
Objekt, die verwendet werden auf dem front-end-Formular vorherigen/nächsten Seite der Logik.Standardmäßig wird diese Klasse verwendet url-Parameter "Seite " und " Größe'; folglich page=0&size=10 wird die Rückkehr der ersten 10 Elemente.
Also in deinem Fall der code könnte ungefähr so Aussehen:
Beachten Sie die Anmerkung
@PageableDefault
ist nur zum einrichten der Standardwerte & es ist nicht erforderlich.In der front-end der nächsten Seite nennen kann
<a href="/top/pages?page=1">Next</a>
; dieser gibt eine Liste der Beiträge von 11 bis 20.org.springframework.data.domain.Page
umschließt den Inhalt Ihrer DTO somit könnenpage.getContent()
. In meinem Beispiel können Sie prüfen, diePost
als ein DTO und die Erstellung erfolgt überPage<Post> page = new PageImpl<>(typedQuery.getResultList(), pageable, totalRows);
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.data.domain.Pageable]: Specified class is an interface
Pageable
parameter Ihrer Methode. Es ist sonderbar, wie sollte es nicht cuaseBeanInstantiationException
.Implementieren Paginierung in Spring Boot ist ganz einfach, nur müssen Sie grundlegende Schritte -
1 Erstreckt PagingAndSortingRepository in repository-Schnittstelle
2 - Methodendeklaration sollte wie unter Beispiel
3 - Methode, Umsetzung in Service-Klasse sollte wie unter Beispiel
4 - Controller-Klasse code sollte wie unten
Vom front-end-rufen werden sollte wie unten
Für mehr details sehen Sie unten video
Spring Boot : Paginierung Basic
Spring Boot : Paginierung Fortgeschrittene
Vielen Dank für das Lesen
Wie Implementieren Sie eine Dynamische Paginierung Mit einer Nativen Query
Hier finden Sie die repository-und Dienst Schichten und Ihre Daten transfer object (DTO), die für die Zuordnung verwendet unser Ergebnis und senden Sie es an die controller-Schicht.
Hibernate übersetzt Ihre Abfrage wie folgt:
Vor-und Nachteile
Profis: Weniger SQL-Abfragen generiert werden, verglichen mit Spring-Data. Diese komplexen Abfragen kann nicht geschrieben werden im Frühjahr, Daten, und wir haben zu geben Sie die Abfrage als einheimischer, der noch ausgelagert werden, die durch die Nutzung dieser Methodik.
Nachteile: Das "Objekt" array abbilden muss, um ein Java-Objekt. Es ist schmerzhaft und schwer zu pflegen.
Wie die Umsetzung OffsetLimit Paginierung Mit Spring Data
Soweit ich weiß, gibt es keine "out-of-the-box" Unterstützung für das, was Sie benötigen, in der Standard-Spring-Data repositories. Aber Sie können erstellen Sie eine benutzerdefinierte Implementierung von Navigierbaren Objekte, die dauern wird-Grenze/offset-Parameter.
Machen ein pageable-Objekt und übergeben es an PaginationAndSortingRepository:
Es bedeutet, es gibt keine Notwendigkeit, ändern Sie die repository-Schicht. Die einzige änderung, die Sie benötigen würde, ist zu machen, ist die service-Schicht, wie folgt:
Beachten Sie, dass Sie nicht brauchen, um Karte das Ergebnis manuell, und es wird sich eine gute Menge an Zeit von der Entwicklung.