복붙노트

[SPRING] Spring 데이터에서 OrderBy를 findAll과 함께 사용하는 방법

SPRING

Spring 데이터에서 OrderBy를 findAll과 함께 사용하는 방법

나는 봄 데이터를 사용하고 DAO는 다음과 같다.

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

위의 코드에서 주석 처리 된 행은 나의 의도를 보여줍니다. 스프링 데이터가 빌트인 기능을 제공 할 수 있는가? 이러한 방법을 사용하여 ASC / DESC를 사용하여 모든 레코드 순서를 찾을 수 있습니까?

해결법

  1. ==============================

    1.

    public interface StudentDAO extends JpaRepository<StudentEntity, Integer> {
        public List<StudentEntity> findAllByOrderByIdAsc();
    }
    

    위의 코드가 작동해야합니다. 비슷한 것을 사용하고 있습니다.

    public List<Pilot> findTop10ByOrderByLevelDesc();
    

    최상위 레벨을 가진 10 개의 행을 반환합니다.

    중대한: 이 답변의 요점을 놓치기 쉽다는 말을 들었 기 때문에 여기에 약간의 설명이 있습니다.

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

    2.AFAIK, 나는이 방법이 직접적인 메서드 명명 쿼리로 가능하다고 생각하지 않는다. 그러나 Sort 클래스를 사용하여 내장 정렬 메커니즘을 사용할 수 있습니다. 저장소에는 정렬의 인스턴스를 전달할 수있는 findAll (Sort) 메소드가 있습니다. 예 :

    AFAIK, 나는이 방법이 직접적인 메서드 명명 쿼리로 가능하다고 생각하지 않는다. 그러나 Sort 클래스를 사용하여 내장 정렬 메커니즘을 사용할 수 있습니다. 저장소에는 정렬의 인스턴스를 전달할 수있는 findAll (Sort) 메소드가 있습니다. 예 :

    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. ==============================

    3.여기를 보시기 바랍니다 : https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.query-methods

    여기를 보시기 바랍니다 : https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.query-methods

    섹션 아래 : "표 2.3. 메소드 이름 내에 지원되는 키워드"

    나는 당신이 말한 것과 똑같은 질의가 필요하다고 생각합니다.

  4. ==============================

    4.예, Spring 데이터에서 쿼리 메소드를 사용하여 정렬 할 수 있습니다.

    예, Spring 데이터에서 쿼리 메소드를 사용하여 정렬 할 수 있습니다.

    예 : 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. ==============================

    5.이 예제에서는 OrderBy 정렬을위한 완벽한 예제를 보여주기 위해 노력합니다.

    이 예제에서는 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);
            }
    }
    
  6. from https://stackoverflow.com/questions/25486583/how-to-use-orderby-with-findall-in-spring-data by cc-by-sa and MIT license