List, Page

Paging

  • JPA Repository에 기본적으로 Page 기능이 있다.
  • 게시판 개발할 때 유용
  • 주로 사용하는 방법 메모

예시 코드

  • DTO
java
@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로 리턴한 데이터를 사용
java
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();

Cursor 조회

  • 주로 배치에서 대량 작업할 때 사용하는 검색 방식
  • 배치 작업으로 인한 변경 값으로 조회하지 말고 ID 값을 조회하여,
    중복 조회가 안되도록 하는 방식

예시 코드

java
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(); }