본문 바로가기

Spring Data JPA

3월 24일 SpringDataJPA 페이징과 정렬

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부터 쓰는게 간단하다.