본문 바로가기
JavaSpringBoot/공부

스프링부트3 페이징 처리 -jpa 이용

by notcherry 2023. 12. 6.

 

 

JPA Repository를 상속받으면 너~~~~~무 편리해서 빠져나오기 힘들다.. 즈파로도 페이징을 할 수 있지 않을까? 해서 찾아봤더니 아니나 다를까..! 

 

 

레포지터리에서 jpa를 상속받고, pageable을 매개변수로 넣어준다.

++ List<DealPost> 였던 것을 페이징 처리를 위해 Page<DealPost>로 수정!

public interface DealRepository extends JpaRepository<DealPost, Long> {
    Page<DealPost> findAllByUuidAndIsDeletedFalse(String uuid, Pageable pageable);
}

 

dealPost list를 가져오는 서비스를 만들 것이다.

uuid로 찾되, 삭제되지 않은 게시글만 가져온다!

++IsDeleted(Boolean isDeleted)로 했다가, 항상 false인 값만 가져와야 하므로 IsDeletedFalse로 바꿨다! 이게 되네.. 즈파,, 당신은 도덕책,,,

 

int page 는 유저가 선택한 페이지이고, pageLimit 개발자가 보여줄 게시글의 수이다.

게시글을 최신순으로 나타내기 위하여 Sort.by(Sort.Direction.DESC, "createAt")를 사용했다.

만약에 pageable만 들어간다면 pageable1을 만들지 않고, pageRequest.of부터 findby메서드에 넣어주면 된다.

    @Override
    public Page<MainPagePostResponseDto> getDealPostLists(int page) {
        int pageLimit = 8;

        Pageable pageable1 = PageRequest.of(page, pageLimit, Sort.by(Sort.Direction.DESC, "createAt"));
        Page<DealPost> dealPosts = dealRepository.findAllByStatusAndIsDeletedFalse(SaleStatus.IN_PROGRESS, pageable1);
        return dealPosts.map(MainPagePostResponseDto::new);
    }

 

 

TMI. PageRequest.of가 바로 되는 이유는, pageable의 상속을 쭉- 따라 올라가면 생성자가 protect로 설정되어있기 때문이다 ㅎㅎ

 

 

이제 서비스를 호출할 카테고리를 보면 page를 파라미터 값으로 받고 보내준다! defaultvalue는 0으로 설정해두면 첫페이지로 향하게 된다.

    /**
     * @return 판매중인 게시글
     */
    @GetMapping("main")
    public ResponseEntity<?> getMainInfo(@RequestParam(value = "page", defaultValue = "0") int page) {
        return new ResponseEntity<>(dealService.getDealPostLists(page), HttpStatus.OK);
    }

 

 

짠 결과물~ 6개씩 잘 찍힘ㅎㅎ

 

 

'JavaSpringBoot > 공부' 카테고리의 다른 글

Enum에 내가 설정한 문자열 값으로 출력하기  (0) 2023.11.14