Spring/스프링 이론

Pageable을 처리하는 여러 방법

블로그 주인장 2024. 1. 25.

SQL을 이용한 Pageable 나타내기

select *
from chat_room
order by created_at desc
limit 0, 25;

 

위와 같은 SQL문을 Spring에서 Pageable을 이용하는 방법에 대해 알아보겠습니다.

 

PageableDefault

컨트롤러를 통해 페이지 정보를 받는 @PageableDefault 어노테이션을 사용하는 방법에 대해 알아보겠습니다.

  @GetMapping
  public ResponseEntity<?> findAll(
      @PageableDefault(size = 5, sort = "createdAt", direction = Direction.DESC) Pageable pageable) {
    return ResponseEntity.ok(chatRoomService.findAll(pageable));
  }

 

해당 어노테이션을 사용하면 page, size, sort 를 설정을 할 수 있습니다.

하지만 Sort를 1가지 조건 밖에 걸 수 없는 단점이 있습니다.

 

SortDefault

그렇기 때문에 @PageableDefault 에서는 page와 size만 설정하고

 

@SortDefault를 이용하여 여러 정렬 조건을 추가하면 원하는 결과를 나타낼 수 있습니다.

@GetMapping
public ResponseEntity<?> findAll(@PageableDefault(size = 5) @SortDefault.SortDefaults({
    @SortDefault(sort = "id", direction = Direction.DESC),
    @SortDefault(sort = "createdAt", direction = Direction.DESC)}) Pageable pageable) {
  return ResponseEntity.ok(chatRoomService.findAll(pageable));
}

 

 

PageRequest

정렬에 대한 정보를 PageRequest 객체에 전달하여 Pageable을 생성하고,

findAll( ) 메서드 안에 해당 Pageable 을 넣어주면 페이지네이션과 정렬을 모두 진행할 수 있습니다.

@Override
@Transactional(readOnly = true)
public Page<ChatRoomResponse> findAll() {
  Pageable pageable = PageRequest.of(0, 5, Sort.by(DESC, "createdAt"));
  return chatRoomRepository.findAll(pageable).map(ChatRoomResponse::fromEntity);
}

 

PageRequest에서 0은 페이지 넘버를 의미하고 5는 한 페이지에 들어갈 수 있는 사이즈를 의미한다.

 

해당 pageable의 경우에는 0번 페이지의 5개의 목록을 조회한다고 생각하면 된다.

 

 

 

본 포스트는 작성자가 공부한 내용을 바탕으로 작성한 글입니다.
잘못된 내용이 있을 시 언제든 댓글로 피드백 부탁드리겠습니다.
항상 정확한 내용을 포스팅하도록 노력하겠습니다.

반응형

'Spring > 스프링 이론' 카테고리의 다른 글

@ModelAttribute, @RequestBody의 차이점  (0) 2024.02.04
Message Broker STOMP 개념  (1) 2024.01.24
Http Interface 사용하기  (0) 2024.01.08

댓글