BACK/SPRING

[Spring Boot] Pageable로 페이징 구현하기

연듀 2022. 7. 31. 17:47

 

 

Pageable으로 페이징처리를 구현한것을 정리해본다.

 

 

 

postRepository

public interface PostRepository extends JpaRepository<Post, Long> {

    @Query(value = "select p from Post p where p.isPrivate = 0")
    Page<Post> findAll(Pageable pageable);

}

 

 

JpaRepository는 PagingAndSortingRepository를 상속받는다. 

Pageable 을 매개변수로 받아 Pagination과 Sort를 구현할 수 있다.

 

 

 

 

 

 

postController

@GetMapping("/postList")
public ResponseEntity<GetPostListDto.Response> getPostList(@RequestParam Optional<Integer> page, @RequestParam Optional<Integer> size, @RequestParam Optional<String> sortBy)
{
    List<Post> postList =  postService.getPostList(page,size,sortBy);

    return ResponseEntity.ok().body(GetPostListDto.Response.builder()
            .postList(postList.stream().map(post -> modelMapper.map(post, GetPostListDto.Post.class)).collect(Collectors.toList()))
            .build());

}

 

 

 

postService

public List<Post> getPostList(Optional<Integer> page, Optional<Integer> size, Optional<String> sortBy) {

    Page<Post> pagePost =  postRepo.findAll(
            PageRequest.of(
                    page.orElse(0),
                    size.orElse(30),
                    Sort.Direction.DESC, sortBy.orElse("id")
            )
    );

    List<Post> postList = pagePost.getContent();
    return postList;
}

 

 

 

page : 요청할 페이지 번호

size : 한 페이지 당 조회 할 갯수

sort : Sorting에 대한 값 설정하는 파라미터(오름차순이 기본)

 

파라미터로 받지 않았다면 page와 size를 각각 0과 30으로 세팅하게 했고, id별로 내림차순(DESC)으로 정렬했다.