programing

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

lastmoon 2023. 7. 26. 22:22
반응형

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

는 제 프로젝트에서 스프링 데이터 JPA를 시도하고 있습니다.데이터를 쿼리하는 즉시 사용할 수 있는 API가 있는지 알고 싶습니다.Sort그리고.Pageable물론 그 방법은 제가 직접 작성할 수 있다는 것은 알고 있습니다, 그냥 기존에 없던 방법이 있는지 알고 싶습니다.내 DAO 확장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).

페이지 테이블에는 정렬을 지정하는 옵션도 있습니다.Java 문서에서

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

정렬 매개 변수가 적용된 새 페이지 요청을 만듭니다.

2020년에, 받아들여진 대답은 약간 구식입니다.PageRequest는 더 이상 사용되지 않으므로 다음과 같은 코드를 사용해야 합니다.

Pageable page = PageRequest.of(pageable.getPageNumber(), pageable.getPageSize(), Sort.by("id").descending());
return repository.findAll(page);

Spring Pageable에는 정렬이 포함되어 있습니다.따라서 요청에 값이 있으면 정렬된 페이지 테이블을 반환합니다.

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

필드별로 정렬된 페이지 테이블이 제공된 순서대로 반환됩니다.

저의 경우, 사용하기 위해Pageable그리고.Sorting동시에 아래와 같이 사용했습니다.이 경우 페이지화 및 정렬을 사용하여 모든 요소를 가져갔습니다.id내림차순으로:

modelRepository.findAll(PageRequest.of(page, 10, Sort.by("id").descending()))

위와 같이 요구 사항에 따라 2열로 데이터를 정렬할 수도 있습니다.

요청 URL에서 정렬 매개 변수 및 정렬 방향을 바로 제공할 수 있습니다.Spring Pageable은 URL 매개변수를 자동으로 구문 분석하고 Rest Controller에서 가져온 Pageable 객체를 생성합니다.수동 PageRequest/Pageable 객체 인스턴스화를 피하는 데 도움이 되기 때문에 가장 좋은 솔루션 중 하나라고 생각합니다(소트 방향 앞에 쉼표 문자 참고).

domain.com/endpoint?sort=[FIELD], [asc|desc]&page=3&size=100

추신: Spring 설명서에 설명된 정렬 방향 사용의 다른 예는 저에게 적합하지 않습니다(오래된 것일 수 있음).

 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

반응형