JPA/JPA

페이징 처리

lovineff 2020. 6. 9. 10:39

**페이지수는 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