스프링데이터 JPA[쿼리 메서드] - 페이징
2021. 2. 6. 22:33ㆍJPA/SPRING DATA JPA
페이징 사용 예)
1
2
3
4
5
6
|
Page<Member> findByUsername(String name, Pageable pageable); //count 쿼리 사용
Slice<Member> findByUsername(String name, Pageable pageable); //count 쿼리 사용 안
함
List<Member> findByUsername(String name, Pageable pageable); //count 쿼리 사용 안
함
List<Member> findByUsername(String name, Sort sort);
|
cs |
- org.springframework.data.domain.Sort: 정렬 기능
- org.springframework.data.domain.Pageable: 페이징 기능(내부에 Sort 포함)
- org.springframework.data.domain.Page: 추가 count 쿼리 결과를 포함하는 페이징
- org.springframework.data.domain.Slice: 추가 count 쿼리 없이 다음 페이지만 확인 가능(내부적 으로 limit + 1조회)
- List (자바 컬렉션): 추가 count 쿼리 없이 결과만 반환
Slice 인터페이스 스펙
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
public interface Slice<T> extends Streamable<T> {
int getNumber(); //현재 페이지
int getSize(); //페이지 크기
int getNumberOfElements(); //현재 페이지에 나올 데이터 수
List<T> getContent(); //조회된 데이터
boolean hasContent(); //조회된 데이터 존재 여부
Sort getSort(); //정렬 정보
boolean isFirst(); //현재 페이지가 첫 페이지 인지 여부
boolean isLast(); //현재 페이지가 마지막 페이지 인지 여부
boolean hasNext(); //다음 페이지 여부
boolean hasPrevious(); //이전 페이지 여부
Pageable getPageable(); //페이지 요청 정보
Pageable nextPageable(); //다음 페이지 객체
Pageable previousPageable();//이전 페이지 객체
<U> Slice<U> map(Function<? super T, ? extends U> converter); //변환기
}
|
cs |
Page 인터페이스 스펙
1
2
3
4
5
|
public interface Page<T> extends Slice<T> {
int getTotalPages(); //전체 페이지 수
long getTotalElements(); //전체 데이터 수
<U> Page<U> map(Function<? super T, ? extends U> converter); //변환기
}
|
cs |
사용 예)
1
2
3
|
PageRequest pageRequest = PageRequest.of(0, 3, Sort.by(Sort.Direction.DESC, "username"));
Page<Member> page = memberRepository.findByAge(10, pageRequest);
|
cs |
PageRequest: Pageable의 구현 클래스
첫번째 인자: offset (0부터 시작)
두번째 인자: limit
세번째 인자: 정렬 정보
DTO로 변환 예)
1 2 | Page<Member> page = memberRepository.findByAge(10, pageRequest); Page<MemberDto> dtoPage = page.map(m -> new MemberDto()); | cs |
'JPA > SPRING DATA JPA' 카테고리의 다른 글
스프링 데이터 JPA - Auditing, 엔티티에 등록일, 수정일, 등록자, 수정자 자동으로 적용하기! (0) | 2021.02.08 |
---|---|
스프링데이터 JPA - 사용자 정의 레퍼지토리 구현 (0) | 2021.02.07 |
스프링 데이터 JPA[쿼리 메서드] - 벌크 연산 (0) | 2021.02.06 |
스프링데이터 JPA[쿼리 메서드] - @Query 어노테이션 사용법 (0) | 2021.02.06 |
스프링데이터 JPA[쿼리 메서드] - 메서드 이름으로 쿼리 생성 규칙, 반환타입 (0) | 2021.02.06 |