일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- re.split
- 백준 16236
- java
- MySQL
- 백준 파이썬
- Kotlin
- JVM
- JPA
- 프로그래머스
- Spring Boot
- 프로래머스
- Coroutine
- 백준 17779
- springboot
- 백준 16719
- 백준
- sql 기술면접
- with recursive
- MSA
- spring security
- spring oauth
- 파이썬
- 백준 19238
- java 기술면접
- spring cloud
- 웹어플리케이션 서버
- 백준 17626
- 백준 15685
- 백준 16235
- Spring
- Today
- Total
시작이 반
[JPA] Paging 본문
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
'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 |