Back End/Spring Data JPA
[Spring Data JPA] 페이징 page=1 부터 시작하기
DevPing9_
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