-
[Spring Data JPA] 페이징 page=1 부터 시작하기Back End/Spring Data JPA 2022. 9. 25. 20:37
Pageable 의 page
Pageable 의 page 는 0 부터 시작한다.
아래의 application.yml 파일에 옵션을 추가하여 클라이언트에서 ?page=1 을 호출할 시
limit 0, {size} 쿼리가 나가도록 수정한다.spring: data: web: pageable: one-indexed-parameters: true
Slice 객체의 number 필드
JPA 레파지토리에서 반환형을 Slice 로 받을 경우
반환되는 객체의 number 필드가 몇 번째 페이지를 쿼리했는지에 대한 정보를 담고 있다.
위의 yml 파일을 수정해주어도 해당 number 필드는 0부터 시작하고 있다.
이를 따로 Custom Response 를 만들어 반환해주어야 한다. (클라이언트가 원할 시)data class SeriesContentsResponse( val seriesTitle: String, val books: List<BookCover>, val page: Int, val isLast: Boolean, ) { companion object { fun of( seriesTitle: String, books: List<BookCover>, page: Int, isLast: Boolean, ): CollectionContentsResponse { return CollectionContentsResponse( seriesTitle = seriesTitle, books = books, page = page + 1, isLast = isLast ) } } }
왜 Page 객체가 아닌 Slice 객체를 쓰는가?
JPA에서 Page 객체는 LastPage 를 확인하기 위해 count 쿼리 + 조회쿼리 총 2개가 발생된다.
반면 Slice 객체는 조회쿼리(limit +1) 1개만 발생한다.
아래의 포스팅에서 확인할 수 있다.Reference
[Spring JPA] JPA의 사실과 오해 (feat. NHN Cloud)
JPA 를 쓰면 쓸수록, 너무 불편한게 많다. 검색으로 원하는 고급정보를 찾기도 어렵다. (정보가 다들 카더라 통신을 통해 대량으로 재생산 되고 있어 깊이가 없을 뿐더러 정확한 검색을 막고 있다
developer-ping9.tistory.com
728x90'Back End > Spring Data JPA' 카테고리의 다른 글
[Spring Data JPA] DB 예약어 처리 (You have an error in your SQL syntax) (0) 2022.12.09 [Spring JPA] 중간테이블 (조인테이블) 이 있을 때 연관관계 매핑 (0) 2022.08.28 [Spring JPA] @MappedSuperClass 사용시 주의할 점 (0) 2022.03.04 save() 메서드 호출 시, select 쿼리가 하나 더 나가요 ㅠㅠ... (1) 2022.02.17 [Spring JPA] JPA, JPQL 의 조인 시 주의할 점 (Outer, Inner, Fetch) (0) 2022.01.29