Как использовать 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);
        }
}