Page를 1부터 시작하기(Pageable, Page 커스텀) 질문 있습니다.
3076
작성한 질문수 3
안녕하세요. 강의 열심히 듣는 중에 궁금한 점이 있습니다.
17:30초 쯤에 Page를 1부터 시작하기 부분에서
1. Pageable, Page를 파리미터와 응답 값으로 사용히지 않고, 직접 클래스를 만들어서 처리한다. 그리고 직접 PageRequest(Pageable 구현체)를 생성해서 리포지토리에 넘긴다. 물론 응답값도 Page 대신에 직접 만들어서 제공해야 한다.
이 부분을 직접 구현해보려고 했는데 제가 놓치는 부분이 있는 건지 잘 안 되더라구요. 그래서
https://inflearn.com/questions/201572
이 질문에 답변해주신 분의 블로그를 참고하여 커스텀을 해봤습니다.
package study.datajpa.dto;
import lombok.Getter;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.Slice;
@Getter
public class PageableCustom {
private boolean first;
private boolean last;
private boolean hasNext;
private int totalPages;
private long totalElements;
private int page;
private int size;
public PageableCustom() {
}
public PageableCustom(PageImpl page) {
this.first = page.isFirst();
this.last = page.isLast();
this.hasNext = page.hasNext();
this.totalPages = page.getTotalPages();
this.totalElements = page.getTotalElements();
this.page = page.getNumber() + 1;
this.size = page.getSize();
}
public PageableCustom(Slice slice) {
this.first = slice.isFirst();
this.last = slice.isLast();
this.hasNext = slice.hasNext();
this.page = slice.getNumber() + 1;
this.size = slice.getSize();
}
}
package study.datajpa.dto;
import lombok.Getter;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.SliceImpl;
import java.io.Serializable;
import java.util.List;
@Getter
public class PageCustom<T> implements Serializable {
private List<T> content;
private PageableCustom pageableCustom;
public PageCustom(List<T> content, Pageable pageable, long total) {
this.content = content;
this.pageableCustom = new PageableCustom(new PageImpl(content, pageable, total));
}
public PageCustom(List<T> content, Pageable pageable, boolean hasNext) {
this.content = content;
this.pageableCustom = new PageableCustom(new SliceImpl(content, pageable, hasNext));
}
}
@GetMapping("/memberscustom")
public PageCustom<MemberDto> listCustom(Pageable pageable) {
Page<MemberDto> map = memberRepository.findAll(pageable).map(MemberDto::new);
return new PageCustom<MemberDto>(map.getContent(), map.getPageable(), map.getTotalElements());
}결과적으로는 커스텀에 성공했지만 코드 내용부분에서 뭔가 아쉬운 부분이 있더라구요.
이게 블로그 보면서 작성한 MemberController 단 내용인데,
보시면 listCustom(Pageable pageable) 에서
Pageable pageable 이 파라미터를 그대로 하지말고 이 부분 또한 커스텀해서
PageRequest.of()를 이용하라고 설명하시더라구요.
혹시 PageRequest.of()를 활용해서 코드를 좀더 최적화 할 수 없을까요?
제가 놓치는 부분이 있는 것 같은데 잘 떠오르지 않아서 이렇게 질문 드립니다!
https://drive.google.com/file/d/1I__dQwuBmtkUdvT5RahN8ksF3Tr21UP8/view?usp=sharing
아! 제 프로젝트 구글 링크 드립니다!ㅎㅎ
항상 양질의 강의 감사합니다!
답변 1
existsByUserIdAndProjectId vs existsByUserAndProject 중 어떤 방식이 적절할까요?
0
69
1
existsByUserIdAndProjectId vs existsByUserAndProject 중 어떤 방식이 적절할까요?
0
107
3
MemberRepository 구현체
0
58
1
pdf 표현 질문드립니다.
0
62
1
로그가 남지 않는 문제.
0
81
1
테스트 라이브러리가 강의는 junit4가 맞나요??
0
70
2
pdf 파일과 차이점이 있는 것같은데 문제 없나요?
0
72
2
@PrePersist, @PreUpdate 호출 시점 질문드립니다.
0
91
2
Sort 인터페이스는 잘 사용 안하나요?
0
52
1
스캔대상 질문드립니다.
0
46
1
하이버네이트6에서의 최적화에 이은 질문
0
85
1
save() vs saveAndFlush DB 통신 횟수
0
53
1
순수 JPA 리포지토리 코드 수정부분
0
86
2
bulk연산 후 flush하는 이유를 모르겠어요
0
152
3
bulk insert 질문입니다.
0
178
2
교만했던 것 같아요.
0
147
1
RESTful 강의는 안하시는 건지 궁금합니다.
0
147
2
동적 테이블에 대한 질문
0
86
1
영속성 전이와 연관관계
0
130
2
강의 10:25 질문
0
74
1
단건 update 질문
0
95
2
엔티티 와 도메인의 경계
0
127
1
UsernameOnlyDto 타입 type mismatch 오류
0
119
1
Projection 개념과 데이터 전달과정에 대해 질문 있습니다.
0
136
1





