J'utilise des données de printemps et mon DAO ressemble à
public interface StudentDAO extends JpaRepository<StudentEntity, Integer> {
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éeutiliser une telle méthode pour rechercher tous les enregistrements par ordre de colonne avec ASC/DESC?
public interface StudentDAO extends JpaRepository<StudentEntity, Integer> {
public List<StudentEntity> findAllByOrderByIdAsc();
}
Le code ci-dessus devrait fonctionner. J'utilise quelque chose de similaire:
public List<Pilot> findTop10ByOrderByLevelDesc();
Il retourne 10 lignes avec le plus haut niveau.
IMPORTANT: Depuis qu'on m'a dit qu'il était facile de rater le point essentiel de cette réponse, voici une petite précision:
findAllByOrderByIdAsc(); // don't miss "by"
^
Si je comprends bien, 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 tri intégré, en utilisant la classe Sort
. Le référentiel a une méthode findAll(Sort)
à laquelle 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<Student> findAll() {
return studentDao.findAll(sortByIdAsc());
}
private Sort sortByIdAsc() {
return new Sort(Sort.Direction.ASC, "id");
}
}
S'il vous plaît 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 que la même requête que vous avez indiquée devrait fonctionner ...
Oui, vous pouvez trier à l'aide d'une méthode d'interrogation dans Spring Data.
Ex: ordre croissant ou décroissant en utilisant la valeur du champ id.
Code:
public interface StudentDAO extends JpaRepository<StudentEntity, Integer> {
public findAllByOrderByIdAsc();
}
solution alternative:
@Repository
public class StudentServiceImpl implements StudentService {
@Autowired
private StudentDAO studentDao;
@Override
public List<Student> findAll() {
return studentDao.findAll(orderByIdAsc());
}
private Sort orderByIdAsc() {
return new Sort(Sort.Direction.ASC, "id")
.and(new Sort(Sort.Direction.ASC, "name"));
}
}
Spring Data Tri: Tri
J'essaie dans cet exemple de vous montrer un exemple complet pour personnaliser vos tris OrderBy
import Java.util.List;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Sort;
import org.springframework.data.jpa.repository.*;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
import org.springframework.data.domain.Sort;
/**
* Spring Data repository for the User entity.
*/
@SuppressWarnings("unused")
@Repository
public interface UserRepository extends JpaRepository<User, Long> {
List <User> findAllWithCustomOrderBy(Sort sort);
}
vous utiliserez cet exemple: Une méthode pour construire dynamiquement un objet qui instance de Sort:
import org.springframework.data.domain.Sort;
public class SampleOrderBySpring{
Sort dynamicOrderBySort = createSort();
public static void main( String[] args )
{
System.out.println("default sort \"firstName\",\"name\",\"age\",\"size\" ");
Sort defaultSort = createStaticSort();
System.out.println(userRepository.findAllWithCustomOrderBy(defaultSort ));
String[] orderBySortedArray = {"name", "firstName"};
System.out.println("default sort ,\"name\",\"firstName\" ");
Sort dynamicSort = createDynamicSort(orderBySortedArray );
System.out.println(userRepository.findAllWithCustomOrderBy(dynamicSort ));
}
public Sort createDynamicSort(String[] arrayOrdre) {
return Sort.by(arrayOrdre);
}
public Sort createStaticSort() {
String[] arrayOrdre ={"firstName","name","age","size");
return Sort.by(arrayOrdre);
}
}