Как использовать OrderBy с findAll в Spring Данные
Я использую данные spring, и мой DAO выглядит как
public interface StudentDAO extends JpaRepository<StudentEntity, Integer> {
public findAllOrderByIdAsc(); // I want to use some thing like this
}
В приведенном выше коде прокомментированная строка показывает мое намерение. Can spring Данные предоставляют встроенную функциональность
использовать такой метод, чтобы найти весь порядок записей в каком-либо столбце с помощью ASC/DESC?
Ответы
Ответ 1
public interface StudentDAO extends JpaRepository<StudentEntity, Integer> {
public List<StudentEntity> findAllByOrderByIdAsc();
}
Код выше должен работать. Я использую нечто подобное:
public List<Pilot> findTop10ByOrderByLevelDesc();
Он возвращает 10 строк с самым высоким уровнем.
ВАЖНО:
Поскольку мне сказали, что легко пропустить ключевой момент этого ответа, здесь немного разъяснения:
findAllByOrderByIdAsc(); // don't miss "by"
^
Ответ 2
AFAIK, я не думаю, что это возможно с прямым запросом на именование метода. Однако вы можете использовать встроенный механизм сортировки, используя класс Sort
. В репозитории есть метод findAll(Sort)
, через который вы можете передать экземпляр Sort
to. Например:
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");
}
}
Ответ 3
Пожалуйста, ознакомьтесь с Spring Data JPA - Справочная документация, раздел 5.3. Методы запросов, особенно в разделе 5.3.2. Создание запроса, в "Таблице 3. Поддерживаемые ключевые слова в именах методов" (ссылки на 2019-05-03).
Я думаю, что это именно то, что вам нужно, и тот же запрос, как вы заявили, должен работать...
Ответ 4
Да, вы можете сортировать, используя метод запроса в Spring Data.
Пример: в порядке возрастания или в порядке убывания, используя значение поля id.
Код:
public interface StudentDAO extends JpaRepository<StudentEntity, Integer> {
public findAllByOrderByIdAsc();
}
альтернативное решение:
@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"));
}
}
Весенняя сортировка данных: сортировка
Ответ 5
В этом примере я пытаюсь показать вам полный пример для персонализации ваших сортировок 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);
}
вы будете использовать этот пример: метод для динамического построения объекта, экземпляр 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);
}
}