J'essaie Spring Data JPA dans mon projet. Je souhaite savoir s'il existe une API prête à l'emploi permettant d'interroger des données, à la fois par Sort
et Pageable
. Bien sûr, je sais que je peux écrire cette méthode moi-même, je veux simplement savoir s’il existe une méthode originale. Mon DAO étend JpaRepository
et j'ai découvert les méthodes suivantes que je peux invoquer:
findAll();
findAll(Pageable pageable);
findAll(Sort sort);
Mais il n’existe pas de méthode telle que findAll(Sort sort, Pageable pageable)
, je suis donc curieux.
Il y a deux façons d'y parvenir:
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);
Comme vous pouvez le constater, le second formulaire est plus flexible puisqu'il permet de définir une direction différente pour chaque propriété (lastName ASC, salary DESC
).
Pageable a une option pour spécifier le tri. Depuis le Java doc
PageRequest(int page, int size, Sort.Direction direction, String... properties)
Crée un nouveau PageRequest avec les paramètres de tri appliqués.
Printemps Pageable a un tri inclus. Donc, si votre demande a les valeurs, elle retournera une pageable triée.
demande: domain.com/endpoint?sort=[FIELDTOSORTBY]&[FIELDTOSORTBY].dir=[ASC|DESC]&page=0&size=20
Cela devrait renvoyer un champ pageable trié par fourni dans l'ordre indiqué.
public List<Model> getAllData(Pageable pageable){
List<Model> models= new ArrayList<>();
modelRepository.findAllByOrderByIdDesc(pageable).forEach(models::add);
return models;
}