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)으로 정렬했다.
반응형