Pageable : 페이징을 제공하는 인터페이스
- getPageNumber() : 현재 페이지 번호를 반환(0부터 시작)
- getPageSize() : 한 페이지당 최대 항목 수를 반환
- getOffset() : 현재 페이지의 시작 위치를 반환
- getSort() : 정렬 정보를 반환
- next() : 다음 페이지 정보를 반환
- previous() : 이전 페이지 정보를 반환
* Pageable을 이용하면 페이지 번호, 페이지당 항목 수, 정렬 정보등을 지정할 수 있다.
* Pageable로 지정한 정보들을 가지고 Page 객체를 반환할 수 있고, Page 객체는 조회된 데이터와 페이지 정보를 함께 갖게 된다.
PagRequset : Spring Data JPA에서 제공하는 Pageable 구현체 중 하나로, 페이지 정보를 생성하는 클래스
- 페이지 번호, 페이지당 항목 수, 정렬 정보를 이용하여 Pageable 인터페이스를 구현한다.
- page : 조회할 페이지 번호(0부터 시작)
- size : 한 페이지당 최대 항목 수
- sort : 정렬 정보(생략 가능)
- direction : 정렬 방향(ASC, DESC)
- properties : 정렬 대상 속성명
* PageRequest 객체를 생성하고 JpaRepsitory 메서드 파라미터로 전달하면 Page 객체를 반환하므로, Pagination을 구현할 수 있다.
Page : 페이징 findAll()을 했을 때 나오는 반환타입 중 하나
페이징 결과 반환타입
Page<T> : offset과 totalPage를 이용하여 서비스를 제공할 수 있게 됨. 일반적인 게시판 형태의 페이징에서 사용
총 페이지 수를 포함하여 반환함
Slice<T> : 더보기 형태의 페이징에서 사용
List<T> : count 쿼리 없ㅇ리 결과만 반환한다.
사용
컨트롤러에 파라미터로 Pageable을 추가하면 페이징 관련 쿼리가 나온다.
springboot 내부에서 url 파라미터가 컨트롤러에 바인딩 될 때 Pageable이 존재하면 pageRequest 객체를 생성한다.
Repository에서 Pageable을 인자로 받고 Page를 반환하는 findByProductName 메소드 생성
이게 ES의 도큐먼트에서 가져오는 것이라서 반환결과는 Page<ProductDocument>인데 서비스에서 컨트롤러로 응답 값을 보내줄 땐 Page<SearchProduct.Response> 타입이어야한다.
그래서 스트림을 이용해 넘어온 요소의 하나하나를 ProductDocument -> SearchProduct.Response 타입으로 변환해주고
.collect를 이용해 리스트로 변환한다음 new PageImpl<>() 소괄호 안에 넣어줘서 리스트 타입을 다시 Page타입으로 변환할 수 있게 해줬다.
끗
'공부' 카테고리의 다른 글
동시성(Concurrency) 이슈 (0) | 2023.12.13 |
---|---|
트랜잭션 (0) | 2023.12.13 |
Elasticsearch) Mapping (1) | 2023.12.08 |
Elasticsearch) 데이터 색인과 텍스트 분석 (1) | 2023.12.08 |
Elasticsearch) Bool 복합 쿼리 , Should, 정확값 쿼리, 범위 쿼리 (2) | 2023.12.08 |