시작이 반

[JPA] Paging 본문

Programming/JPA

[JPA] Paging

G_Gi 2021. 2. 5. 00:50
SMALL

JAP Paging

DB에 저장된 데이터들을 페이지에 맞춰서 몇개씩 뿌릴건지 알려주는것.

DB에 저장된 데이터가 30개라고 한다면

프론트에서 1페이지, 5개 라고 요청을 한다.

그러면 백엔드에서 전체 DB에서 데이터를 앞에서부터 5개씩 분류하여 해당 페이지에 맞는 데이터를 넘겨준다.

 

 

사용법

Pageable을 사용하거나 PageRequest를 사용한다.

여기선 Pageable을 사용하였음

 

Controller

    @GetMapping("/list")
    @ResponseBody
    public List<Book> GetBookList(Pageable pageable){
        return bookDBService.FindBooksBypageRequest(pageable);
    }

 

Service

    public List<Book> FindBooksBypageRequest(Pageable pageable){
        return bookRepository.findAll(pageable).getContent();
    }

 

DB

 

url요청

/list?page= &size= &sort= ,정렬방식

page : 검색을 원하는 페이지 번호(0부터 시작)

size : 한페이지에 들어올 데이터 개수

sort : 정렬방식, 어떤 데이터로 정렬할 것인지 (ex. sort=title,asc    sort=rank,desc) 

 

결과

3개의 데이터가 나오는 것을 볼 수 있다.

 

그런데 /list 로 아무 데이터를 넘겨주지 않으면 어떻게 될까?

 

확인해볼결과 20개의 데이터가 나왔다. 기본값으로 0페이지의 20개의 데이터를 정렬되지 않은 정보를 준 것을 확인 할 수 있었다.

 

때문에 페이지당 몇개의 데이터를 뿌릴지 기본으로 지정해줄 수 있게 해주는 방법은

@PageableDefault 를 사용하는 것이다.

    @GetMapping("/list")
    @ResponseBody
    public Page<Book> GoBookList(@PageableDefault(size = 3) Pageable pageable){
        Page<Book> books = bookDBService.FindBooksBypageRequest(pageable);
        return books;
    }

이 어노테이션을 사용하면 예시와 같이 사이즈의 크기를 정해줄 수 있다.

사이즈 뿐만 아니라 page, sort도 정해 줄 수 있다.

 

Page는 뭘담고 있는지 확인해보자

Postman으로 확인해본 결과

우선 DB의 값들이 저장되어 있다. (Content)

그리고 pageable에 대한 정보

 

last : 마지막 페이지인지

totalElements : DB의 전체 데이터 개수

totlaPages : 만들수 있는 page수

size : 페이지당 나타낼수 있는 데이터 개수

number : 현재 페이지 번호

sort : 정렬 정보

first : 첫번쨰 페이지 인지

numberOfElements : 실제 데이터 개수 

empty : 리스트가 비어있는지 여부

 

page에 담겨진 content의 데이터는 entity이다.

즉 이것을 service - controller - client 단에서 사용될 DTO형태로 바꿔서 사용해야 한다.

 

이것은 Page 인터페이스를 구현한 PageImpl을 사용하면 간단하다.

PageImpl을 생성할때

content의 타입을 바꿔준 list, pageable, 총 데이터 개수 가 들어간다.

list의 타입을 바꿔서 맵핑 시켜주는것은 이전 포스팅에서 다뤘다.

Class : Book

 

LIST

'Programming > JPA' 카테고리의 다른 글

[JPA] 변경감지와 병합(merge)  (1) 2021.05.27
[JPA] DTO, Domain(Entity)  (0) 2021.02.19
[JPA] 연관관계  (0) 2021.02.18
[JPA] List<DTO> to List<Entity> (DTO, Entity)  (0) 2021.02.01
[JPA] JpaRepository  (0) 2021.01.31