- JPA Repository에 기본적으로 Page 기능이 있다.
- 게시판 개발할 때 유용
- 주로 사용하는 방법 메모
@Getter
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class PageResponse<T> {
private List<T> content; // 리스트 내용
private int page; // 조회된 현재 페이지 번호
private int size; // 페이지당 보여주는 수 (리스트 길이)
private long totalElements; // 전체 데이터 수
private int totalPages; // 전체 페이지 수
private boolean first; // 조회된 페이지가 첫번째 페이지인지
private boolean last; // 조회된 페이지가 마지막 페이지인지
}
- 실제 사용할 때,
Page로 리턴한 데이터를 사용
return PageResponse.<OrgContractResponse>builder()
.content(content)
.page(pages.getNumber())
.size(pages.getSize())
.totalElements(pages.getTotalElements())
.totalPages(pages.getTotalPages())
.first(pages.isFirst())
.last(pages.isLast())
.build();
- 주로 배치에서 대량 작업할 때 사용하는 검색 방식
- 배치 작업으로 인한 변경 값으로 조회하지 말고 ID 값을 조회하여,
중복 조회가 안되도록 하는 방식
int lastId = 0;
while(true) {
// 마지막 id값보다 큰 데이터 조회
// 1000개 단위 조회
List<T> list = repository.findAllByIdGreaterThan(lastId, PageRequest.of(0, 1000));
// 데이터 0 인경우 while문 종료
if (list.isEmpty()) break;
// 배치 작업 진행
for (T item : list) {
// 배치 진행
}
// 마지막 id값 저장
lastId = list.getLast().getId();
}