728x90
- page도큐먼트 링크
page사용 방법 1. 쿼리 사용
// public interface MemberRepository extends JpaRepository<Member, Long> 클래스 내부
Page<Member> findAll(Pageable pageable);
// MemberService 내부
public Page<MemberResponse> findAll(PageRequest request){
Page<Member> all = memberRepository.findAll(request);
return all.map(r -> new MemberResponse(r));
}
// MemberController 내부
@GetMapping
public Page<MemberResponse> findAll(@RequestParam(name = "page", required = false,
defaultValue = "0") Integer page, @RequestParam (name = "size", required = false,
defaultValue = "5") Integer size){
PageRequest request = PageRequest.of(page, size);
return memberService.findAll(request);
}
< List to Page변환 >
page사용 방법 2. 기존의 List타입 코드 사용
// ProductController 클래스 내부
@GetMapping
public List<ProductResponse> findAll() {
return productService.findAll();
}
// ProductService 클래스 내부
public List<ProductResponse> findAll() {
List<Product> all = productRepository.findAll();
return all.stream().map(ProductResponse::new).toList();
}
page사용 방법 3. PageIpml 사용
// ProductController 클래스 내부
@GetMapping
public Page<ProductResponse> findAll(@RequestParam(defaultValue = "0") Integer page,
@RequestParam(defaultValue = "3") Integer size) {
PageRequest request = PageRequest.of(page, size);
return productService.findAll(request);
}
// ProductService 클래스 내부
public Page<ProductResponse> findAll(PageRequest request) {
Page<Product> productPage = productRepository.findAll(request);
List<ProductResponse> productResponses = productPage
.map(product -> new ProductResponse(product))
.toList();
// PageImpl클래스를 사용하여 productResponses리스트와 페이지 정보,
총 엔티티 수를 이용하여 새로운 Page객체를 생성하고 반환
// new PageImpl<>(페이지 내용, 페이지정보(인풋으로 받은 pageable), 총 아이템 수)
return new PageImpl<>(productResponses, request, productPage.getTotalElements());
}
PageIpml 클래스 : 페이지 구현
PageImpl<>(페이지 내용, 페이지정보(인풋으로 받은 pageable), 총 아이템 수)
'공부 > Spring' 카테고리의 다른 글
[Spring] SOLID원칙(코드 예시) (0) | 2023.09.27 |
---|---|
[Spring] @Controller와 @RestController의 차이 (0) | 2023.09.03 |
@CrossOrigin Annotation (0) | 2023.08.14 |
spring프로젝트 생성 (0) | 2023.07.10 |
spring web mvc패턴의 흐름 (0) | 2023.06.26 |