Ich versuche Spring data JPA in meinem Projekt. Ich möchte wissen, ob es eine sofort einsatzbereite API gibt, um Daten abzufragen, sowohl von Sort
als auch von Pageable
. Natürlich weiß ich, dass ich diese Methode selbst schreiben kann, ich möchte nur wissen, ob es eine Out-of-the-Box-Methode gibt. Mein DAO erweitert JpaRepository
und ich habe festgestellt, dass es folgende Methoden gibt, die ich aufrufen kann:
findAll();
findAll(Pageable pageable);
findAll(Sort sort);
Aber es gibt keine Methode wie findAll(Sort sort, Pageable pageable)
, also bin ich neugierig.
Es gibt zwei Möglichkeiten, dies zu erreichen:
final PageRequest page1 = new PageRequest(
0, 20, Direction.ASC, "lastName", "salary"
);
final PageRequest page2 = new PageRequest(
0, 20, new Sort(
new Order(Direction.ASC, "lastName"),
new Order(Direction.DESC, "salary")
)
);
dao.findAll(page1);
Wie Sie sehen, ist das zweite Formular flexibler, da für jede Eigenschaft (lastName ASC, salary DESC
) eine andere Richtung definiert werden kann.
Pageable hat eine Option, um auch die Sortierung anzugeben. Aus dem Java-Dokument
PageRequest(int page, int size, Sort.Direction direction, String... properties)
Erstellt eine neue PageRequest mit angewendeten Sortierparametern.
Spring Pageable enthält eine Sortierung. Wenn Ihre Anfrage also die Werte hat, wird eine sortierte Auslagerungsseite zurückgegeben.
anfrage: domain.com/endpoint?sort=[FIELDTOSORTBY]&[FIELDTOSORTBY].dir=[ASC|DESC]&page=0&size=20
Daraufhin wird ein sortiertes seitenfähiges Feld in der angegebenen Reihenfolge zurückgegeben.
public List<Model> getAllData(Pageable pageable){
List<Model> models= new ArrayList<>();
modelRepository.findAllByOrderByIdDesc(pageable).forEach(models::add);
return models;
}