Development Tip

Sort 및 Pageable 모두에서 Spring 데이터 JPA를 사용하여 데이터를 즉시 쿼리하는 방법은 무엇입니까?

yourdevel 2020. 10. 31. 10:11
반응형

Sort 및 Pageable 모두에서 Spring 데이터 JPA를 사용하여 데이터를 즉시 쿼리하는 방법은 무엇입니까?


내 프로젝트에서 Spring 데이터 JPA시도하고 있습니다. Sort.NET 모두를 사용 하여 데이터를 쿼리하는 기본 API가 있는지 알고 싶습니다 Pageable. 물론이 방법을 직접 작성할 수 있다는 것을 알고 있습니다. 바로 사용할 수있는 방법이 있는지 알고 싶습니다. 내 DAO extends JpaRepository, 호출 할 수있는 다음 메서드가 있음을 알았습니다.

findAll();
findAll(Pageable pageable);
findAll(Sort sort);

근데라는 방법이 없어서 findAll(Sort sort, Pageable pageable)궁금하다.


이를 달성하는 두 가지 방법이 있습니다.

final PageRequest page1 = new PageRequest(
  0, 20, Direction.ASC, "lastName", "salary"
);

final PageRequest page2 = new PageRequest(
  0, 20, new Sort(
    new Order(Direction.ASC, "lastName"), 
    new Order(Direction.DESC, "salary")
  )
);

dao.findAll(page1);

보시다시피 두 번째 형식은 모든 속성 ( lastName ASC, salary DESC)에 대해 다른 방향을 정의 할 수 있으므로 더 유연합니다 .


Pageable에는 정렬을 지정하는 옵션도 있습니다. 로부터 자바 문서

PageRequest(int page, int size, Sort.Direction direction, String... properties) 

정렬 매개 변수가 적용된 새 PageRequest를 만듭니다.


Spring Pageable 에는 Sort가 포함되어 있습니다. 따라서 요청에 값이 있으면 정렬 된 페이징 가능 항목이 반환됩니다.

의뢰: domain.com/endpoint?sort=[FIELDTOSORTBY]&[FIELDTOSORTBY].dir=[ASC|DESC]&page=0&size=20

제공된 순서로 제공된 필드별로 정렬 된 페이징 가능 항목을 반환해야합니다.


 public List<Model> getAllData(Pageable pageable){
       List<Model> models= new ArrayList<>();
       modelRepository.findAllByOrderByIdDesc(pageable).forEach(models::add);
       return models;
   }

참고 URL : https://stackoverflow.com/questions/10527124/how-to-query-data-out-of-the-box-using-spring-data-jpa-by-both-sort-and-pageable

반응형