Comment utiliser OrderBy avec findAll dans Spring Data

J’utilise des données de spring et mon DAO ressemble à

public interface StudentDAO extends JpaRepository { public findAllOrderByIdAsc(); // I want to use some thing like this } 

Dans le code ci-dessus, la ligne commentée montre mon intention. Spring Data peut-il fournir une fonctionnalité intégrée pour utiliser une telle méthode afin de trouver tous les enregistrements d’ordre par une colonne avec ASC / DESC?

 public interface StudentDAO extends JpaRepository { public List findAllByOrderByIdAsc(); } 

Le code ci-dessus devrait fonctionner. J’utilise quelque chose de similaire:

 public List findTop10ByOrderByLevelDesc(); 

Il renvoie 10 lignes avec le plus haut niveau.

IMPORTANT: Comme on m’a dit qu’il est facile de rater le point clé de cette réponse, voici un petit éclaircissement:

 findAllByOrderByIdAsc(); // don't miss "by" ^ 

AFAIK, je ne pense pas que ce soit possible avec une requête de nommage de méthode directe. Vous pouvez cependant utiliser le mécanisme de sorting intégré, en utilisant la classe Sort . Le référentiel a une findAll(Sort) que vous pouvez transmettre à une instance de Sort . Par exemple:

 import org.springframework.data.domain.Sort; @Repository public class StudentServiceImpl implements StudentService { @Autowired private StudentDAO studentDao; @Override public List findAll() { return studentDao.findAll(sortByIdAsc()); } private Sort sortByIdAsc() { return new Sort(Sort.Direction.ASC, "id"); } } 

Veuillez jeter un oeil ici: https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.query-methods

Sous la section: “Tableau 2.3. Mots-clés pris en charge dans les noms de méthodes”

Je pense qu’il a exactement ce dont vous avez besoin et la même requête que vous avez indiquée devrait fonctionner …

Oui, vous pouvez sortinger en utilisant la méthode de requête dans Spring Data.

Ex: ordre croissant ou ordre décroissant en utilisant la valeur du champ id.

Code:

  public interface StudentDAO extends JpaRepository { public findAllByOrderByIdAsc(); } 

solution alternative:

  @Repository public class StudentServiceImpl implements StudentService { @Autowired private StudentDAO studentDao; @Override public List findAll() { return studentDao.findAll(orderByIdAsc()); } private Sort orderByIdAsc() { return new Sort(Sort.Direction.ASC, "id") .and(new Sort(Sort.Direction.ASC, "name")); } } 

Tri des données de spring: sorting