JPA 페이징, 정렬처리

kmb·2022년 5월 24일
1

JPA

목록 보기
5/7
post-thumbnail

JPA에서는 실제 DB에서 사용하는 SQL의 처리를 자동으로 하기 때문에 우리는 SQL이 아닌 API의 객체와 메서드를 사용하는 형태로 페이징 처리를 할 수 있다.

처음 Spring Initializr에서 프로젝트 생성할때 dependency에서 Spring Data JPA를 사용할 경우
1) Pageable 인터페이스
2) 실제 객체를 생성할때는 구현체인 org.springframework.data.domain.PageReqeust 클래스를 사용할 수 있다.

이때 PageRequest 클래스의 생성자는 .of( ) 메서드 및 내부의 page, size, Sort 정보를 이용해서 객체를 생성한다.

.of(int page, int size) : 0부터 시작하는 페이지 번호, 개수
.of(int page, int size, Sort.Direction direction, String ... props) : 0부터 시작하는 페이지 번호, 개수, 정렬 방향, 정렬 기준 필드
.of(int page, int size, Sort sort) : 페이지 번호, 개수, 정렬 정보

Pageable pageable = PageRequest.of(0, 10);
Page<Memo> result = memoRepository.findAll(pageable);

for(Memo memo : result.getContent()) {
    System.out.println(memo);
}

--> findAll( ) 메서드에 pageable 파라미터를 전달하면 페이지 관련 쿼리를 실행하고 이 결과를 반환 타입으로 지정된 Page<entity> 객체로 저장한다.
이때 실제 페이지의 데이터를 처리하려면 List<entity>를 반환하는 .getContent( ) 메서드를 사용하거나 Stream<entity>을 반환하는 .get( ) 메서드를 사용한다.


Sort sort1 = Sort.by("mno").descending();      // PK인 mno를 역순(desc)으로 정렬
Sort sort2 = Sort.by("memoText").ascending();  // memoText 컬럼을 순차적(asc)로 정렬
Sort sortAll = sort1.and(sort2);


Pageable pageable = PageRequest.of(0, 10, sortAll);
Page<Memo> result = memoRepository.findAll(pageable);


result.get().forEach(memo -> {
    System.out.println(memo);
});

--> PageReqeust 클래스는 정렬과 관련된 org.springframework.data.domain.Sort 타입을 파라미터로 전달할 수 있다.
이를 이용해서 페이징 처리를 통해 출력된 결과를 .descending( ) 메서드로 역순(desc)으로 정렬하거나 .ascending( ) 메서드로 순차적(asc)으로 정렬 시킬수 있다.

 

출처

  • 코드로 배우는 스프링부트 웹프로젝트 (책)
profile
꾸준하게

0개의 댓글