🔥새해맞이 특별 라이브 선착순 신청🔥

JPA 페이징 정리

  • Repository
    Page<Entity> findBySearch(String search, Pageable pageable)

 

  • Controller
    @PageDefault(page=n, size=n, sort="필드이름", direction=Direction.class) 또는 설정파일에서 설정
    Pageable pageable 파라미터로 url 쿼리스트링 받음

 

  • Url
    ?page=0&size=10&sort=field,direction&sort=field&field.dir=direction
    page는 0부터 시작

 

  • 페이지를 구성하는 요소

Pageable의 page, PageImpl의 number : 현재 페이지

Pageable의 size : 한 페이지의 데이터 개수

Pageable의 offset : 데이터 필터 시작 위치

limit : 오프셋으로부터 가져올 데이터 개수 == Pageable의 size

PageImpl의 totalElements: 총 데이터 개수

PageImpl의 totalPage: 총 페이지 개수

PageImpl의 hasNext hasPrev isFirst isLast

new PageImpl<>(results, pageable, totalElements)

 

JPA가 아니라면, 총페이지를 구할 때는 데이터 총개수를 count쿼리로 가져온 후

총개수를 사이즈로 나눔

총 페이지 수는 다음과 같음

1. 총개수가 size보다 작을 경우에는 1

2. 나머지가 있는 경우에는 (totalCount / size) + 1

3. 나누어 떨어지는 경우에는 totalCount / size

 

  • 페이지 넘버 나열하기

기본 10개씩 페이지 넘버 정렬한다고 가정.

시작 페이지 넘버는 다음과 같음

1. totalPage가 10이하일 경우에는 totalPage까지.

2. totalPage가 10이상일 경우에는

(현재 페이지 넘버 - (현재 페이지 넘버 / 10)) + 1

부터 +1 하며 10개 나열

* 이전 버튼은 현재 페이지 시작 넘버(:first)가 1이 아닐 경우 현재 페이지 시작 넘버 - 1

* 다음 버튼은 현재 페이지 끝 넘버가 totalPage가 아닌 경우 현재 페이지 끝 넘버 + 1

 

  • 데이터 인덱스 목록

( (현재 페이지 넘버 - 1) * size ) + 1

부터 +1 하면서 데이터 나열

 

 

댓글을 작성해보세요.

채널톡 아이콘