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 하면서 데이터 나열
댓글을 작성해보세요.