스프링

[Spring] Pageable 인터페이스 사용해보기

zumsim 2023. 1. 8. 21:07
728x90
반응형
Spring Data JPA에서 페이징 처리와 정렬은 findAll()이라는 메서드를 이용한다.
findAll()은 JpaRepository 인터페이스의 상위인 PagingAndSortRepository의 메서드로
파라미터로 전달되는 'Pageable'이란 타입의 객체에 의해 실행되는 쿼리를 결정한다.

 

Pageable 인터페이스?

 

페이지 처리를 위해 가장 중요한 건 org.springframework.data.domain.Pageable 인터페이스이다.

Pageable은 페이지 처리에 필요한 정보는 전달하는 용도의 인터페이스 타입으로, 실제 객체를 생성할 때는 구현체인

org.springframework.data.domain.PageRequest라는 클래스를 사용한다.

 

PageRequest?

 

이 클래스의 생성자는 protected로 선언되어 new를 이용할 수 없어 생성하기 위해선 static한 of()를 이용해서 처리한다.

PageRequest 생성자를 보면 page, size, Sort라는 정보를 이용한다.

of(int page, int size)
- 0부터 시작하는 페이지 번호와 개수(size), 정렬이 지정되지 않음

of(int page, int size, Sort.Direction direction, String .. props)
- 0부터 시작하는 페이지 번호와 개수, 정렬의 방향과 정렬 기준 필드들

of(int page, int size, Sort sort)
- 페이지 번호와 개수, 정렬 관련 정보

예제

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public void testPageDefault() {
 
    Pageable pageable = PageRequest.of(010);
 
    Page<Memo> result = memoRepository.findAll(pageable);
 
    System.out.println(result);
    System.out.println("-------------------------------------------");
 
    System.out.println("Total Pages ::: "+result.getTotalPages());      //총 페이지 수
    System.out.println("Total count ::: "+result.getTotalElements());   //전체 개수
    System.out.println("Page Number ::: "+result.getNumber());          //현재 페이지 번호
    System.out.println("Page Size ::: "+result.getSize());              //페이지당 데이터 개수
    System.out.println("has Next page? ::: "+result.hasNext());         //다음 페이지 존재 여부
    System.out.println("first page? ::: "+result.isFirst());            //시작 페이지(0) 여부
    System.out.println("-------------------------------------------");
 
    for (Memo memo : result.getContent()) {
        System.out.println(memo);
    }
}
cs

 

출력 결과

-------------------------------------------
Total Pages ::: 10
Total count ::: 99
Page Number ::: 0
Page Size ::: 10
has Next page? ::: true
first page? ::: true
-------------------------------------------
Memo(mno=1, memoText=Sample...1)
Memo(mno=2, memoText=Sample...2)
Memo(mno=3, memoText=Sample...3)
Memo(mno=4, memoText=Sample...4)
Memo(mno=5, memoText=Sample...5)
Memo(mno=6, memoText=Sample...6)
Memo(mno=7, memoText=Sample...7)
Memo(mno=8, memoText=Sample...8)
Memo(mno=9, memoText=Sample...9)
Memo(mno=10, memoText=Sample...10)

 

 

정렬 조건 추가하기

 

PageRequest에는 정렬과 관련된 org.springframework.data.domain.Sort 타입을 파라미터로 전달 할 수 있다.

한 개 혹은 여러 개의 필드 값을 이용해서 순차적 혹은 역순으로 정렬을 지정 할 수 있다.

 

예제

1
2
3
4
5
6
7
8
9
10
11
12
public void testSort() {
    Sort sort = Sort.by("mno").descending();
 
    Pageable pageable = PageRequest.of(010, sort);
 
    Page<Memo> result = memoRepository.findAll(pageable);
    System.out.println("-------------------------------------------");
 
    for (Memo memo : result.getContent()) {
        System.out.println(memo);
    }
}
cs

 

출력 결과

Memo(mno=99, memoText=Sample...99)
Memo(mno=98, memoText=Sample...98)
Memo(mno=97, memoText=Sample...97)
Memo(mno=96, memoText=Sample...96)
Memo(mno=95, memoText=Sample...95)
Memo(mno=94, memoText=Sample...94)
Memo(mno=93, memoText=Sample...93)
Memo(mno=92, memoText=Sample...92)
Memo(mno=91, memoText=Sample...91)
Memo(mno=90, memoText=Sample...90)

 

 

728x90
반응형