페이징/정렬 처리하기

Shaun·2021년 7월 26일
1

JPA

목록 보기
3/31

페이징

-JPA 는 페이징처리와 정렬처리를 finAll()이라는 메서드를 사용한다.

-findAll()은 JpaRepository 인터페이스의 상위인 PagingSortRepository의 메서드로 전달되는 Pageablwe이라는 타입의 객체에 의해서 실행되는 쿼리를 결정하게 된다.

-리턴타입은 Page타입으로 지정하는경우 반드시 파라미터를 Pageable 타입을 사용해야한다.

Pagealbe 인터페이스

-pageable 인터페이스는 페이지 처리에 필요한 정보를 전달하는 용도의 타입으로, 인터페이스 이기 떄문에 객체를 생설할떄는 구현체인 PageRequest라는 클래스를 이용한다.

PageRequest클래스

-이 클래스의 생성자는 protected 로선언되어 new를 사용할수 없다.

-static한 of() 를 사용해야 한다.

-PageRequest 생성자를 보면 page,size,sort 라는 정보를 이용해서 객체를 생성한다.

페이징 처리 실습

-Spring Data Jpa 를 이용할떄는 페이지 처리는 반드시 '0부터 시작한다' 는 점을 기억해야 한다.

(제가 주석을 세세하고 많이 적는 습관이 있어서 많은 주석으로 인한 지저분한 코드 죄송합니다)

코드설명

  • findAll()에 Pageable 타입의 파라미터를 전달하면 페이징 처리에 관련된 쿼리들을 실행하고, 이 결과들을 이용해 리턴타입으로 지정된 page<엔티티 타입>객체로 저장한다.
  • page 타입은 단순히 해당 목록만 가져오는데 그치지 않고 실제 페이지 처리에 필요한 전체 데이터의 개수를 가져오는 쿼리 역시 같이 처리한다.
  • 데이터가 충분하지 않다 면 데이터의 개수를 가져오는 쿼리를 실행하지 않는다

page<엔티티 타입> 메서드

  • getTotalPages() =총 몇페이지
  • getTotalElements() =전체 개수
  • getNumber()=현재페이지번호
  • getSize()=페이지당 데이터개수
  • hasNext()=다음페이지존재여부
  • isFirst()=시작페이지(0)여부
  • getContent() =전체출력 List<엔티티타입> 으로 반환

정렬

-sort타입을 파라미터로 전달 할수 있다.
-순차적 정렬(asc), 역순 정렬(desc) 지정할수 있다.

코드설명

  • 정렬기준을 sort 로 만들어준다.

  • PageReuqest.of(페이지번호, 개수, 정렬기준) 으로 작성해준다.

  • forEach() 반복문으로 출력

    ※정렬 조건은 and() 를 이영해서 여러 개의 정렬 조건을 다르게 지정할 수 있다.

profile
호주쉐프에서 개발자까지..

0개의 댓글