page 와 Pageable 을 사용
@GetMapping("/members")
public Page<Member> list(Pageable pageable){
Page<Member> page = memberRepository.findAll(pageable);
return page;
}
위 같이 page 형태로 반환받고 pageable을 매개변수로 사용하면 스프링이 페이징 해준다.
pageable 은 인터페이스 , page는 결과 정보이다.
pageable이 있으면 spring이 PageRequest를 생성해서 값을 세팅해 준다.
또한
http://localhost:8080/member?page = 0 을 붙여주면 0페이지부터 가져온다 (한 페이지당 기본값 20개)
http://localhost:8080/member?page=0&size=3 한 페이지 최대값 3개
http://localhost:8080/member?page=0&size=3&sort=id,desc 정렬도 가능
page 글로벌 설정 <application.yam>
data:
web:
pageable:
default-page-size:10
max-page-size:2000
page 지역설정
public page<Member> List (@PageableDefault(size = 5, sort = "username") Pageable pageable)
접두사
페이징정보가 둘 이상이면 접두사로 구분한다.
@Qualifier 에 접두사명 추가 "(접두사명)_xxx"
ex) "/members?member_page = 0&order-page=1"
public String List(
@Qualifier("member") Pageable memberPageable,
@Qualifier("order") Pageable orderPageable
)
DTO로 반환
Page<Member> page = memberRepository.findAll(pageable);
엔티티를 DTO에 담아서 반환
Page<MemberDto> map = page.map(member -> new MemberDto(member.getId(),member.getUsername, null))
map()을 사용해서 변환한다.
DTO로 반환2
DTO class가 엔티티 자체를 받을 수 있다.
public MemberDto(Member member){
this.id = member.getId()
this.username = member.getUsername()
}
이렇게 하면 메소드 참조를 사용가능
return memberRepository.findAll(pageable).map(MemberDto::new);
page1부터 시작하기
1.직접정의해서 해결하기
pageRequest request = pageRequest.of(1,2);
2.설정추가 application.yam 에 추가
one-indexed-palameters : true
이 방법의 경우 pageable과 데이터가 안맞는다.
그냥 page를 0부터 쓰는게 간단하다.
'Spring Data JPA' 카테고리의 다른 글
| 쿼리 메소드 조건들 (0) | 2023.03.27 |
|---|---|
| 3월 23일 SpringDataJPA 도메인 클래스 컨버터 (0) | 2023.03.23 |
| 3월 23일 SpringDataJPA Auditing (0) | 2023.03.23 |
| 3월 23일 SpringDataJPA 사용자 정의 리포지토리 구현 (0) | 2023.03.23 |
| 3월 22일 SpringDataJPA hint & lock (0) | 2023.03.22 |