**페이지수는 0부터 시작한다
public interface MemberRepository extends JpaRepository<Member, Long> {
// 기본 페이징 처리(totalcnt 조회 가능)
Page<Member> findByAge(int age, Pageable pageable);
// 가져오려는 수보다 +1 더 가져와 구현 가능(totalcnt 없음), 모바일 device에서 구현할때 사용함.(미리 로딩 가능)
Slice<Member> findByAge(int age, Pageable pageable);
// 카운트 쿼리를 분리해서 사용이 가능하다.
@Query(countQuery = "")
...
}
// 구현부
int page = 0;
int limit = 3;
PageRequest pageRequest = PageRequest.of(page, limit, Sort.by(Sort.Direction.DESC, "username"));
Page<Member> page = memberRepository.findByAge(findAge, pageRequest);
Page<MemberDto> map = page.map(member -> new MemberDto(member.getUsername(), member.getAge())); // API 전달시 entity를 반환하면 안되므로 변환
List<Member> content = page.getContent(); // 검색된 내용
page.getTotalElements() // 전체 로우수
page.getNumber() // 현재 페이지
page.getTotalPages() // total 페이지수
page.isFirst() // 첫번째 페이지 여부
page.hasNext() // 다음 페이지 여부
두번째 방법
@GetMapping("/members")
public Page<Member> list(@PageableDefault(size = 2) Pageable pageable){ // @PageableDefault(size = 2) 내에 기본 페이징 설정값 전달 가능
// return memberRepository.findAll(pageable); // 엔티티를 반환하면 안되고, DTO를 반환
Page<Member> page = memberRepository.findAll(pageable);
return page.map(m -> new MemberDto(m.getId(), m.getUsername(), null));
}
// 호출
http://localhost:8080/members?page=0&size=3&sort=id,desc
'JPA > JPA' 카테고리의 다른 글
SAVE 메서드 주의 사항 (0) | 2020.06.09 |
---|---|
사용자 정의 리포지토리 구현 (0) | 2020.06.09 |
Auditing (0) | 2020.06.09 |
컬렉션 조회(OneToMany) (0) | 2020.06.09 |
OneToOne Entity (0) | 2020.06.09 |