7. Paging, Iterating Large Results, Sorting & Limiting
- 대규모 데이터 세트를 효율적으로 조회 및 처리
Concept | Description | Usage |
Paging | 페이징 정보 전달 |
Pageable 매개변수 사용 (페이지 번호, 정렬 기준, 조회 결과 수)
Page<T>와 Slice<T> 반환 타입 사용 |
Sorting | 정렬 기준을 전달하는 매개변수 |
Sort 매개변수 사용
- 정렬 기준 설정 가능 (ascending(), descending()) |
Limiting | 조회 결과 수를 제한하는 방법 |
Top, First 키워드, Limit 매개변수 사용
|
예제) Paging
더보기
Page<User> findByLastname(String lastname, Pageable pageable);
Slice<User> findByLastname(String lastname, Pageable pageable);
List<User> findByLastname(String lastname, Pageable pageable);
Pageable pageable = PageRequest.of(pageNumber, pageSize);
Pageable pageable = PageRequest.of(pageNumber, pageSize, Sort.by(Sort.Order.asc("lastname")));
Concept | Description | Usage |
Pageable | 페이징 정보를 전달하는 매개변수 - 페이지 번호, 정렬 기준, 조회 결과 수 |
Page<T>와 함께 사용 ✅
Slice<T>와 함께 사용 ❌ |
Return Type
|
Slice<T> - 페이지 크기 + 1개 (다음 슬라이스 존재 여부 확인 가능) |
다음 슬라이스 존재 여부 확인 가능 (hasNext())
|
Page<T> - 페이지 크기 + 전체 갯수 (전체 카운트 쿼리 실행) |
전체 결과 수를 알 수 있음
|
예제) Sorting
더보기
Sort (new)
Sort sort = Sort.by("firstname").ascending().and(Sort.by("lastname").descending());
TypedSort<Person> person = Sort.sort(Person.class);
Sort sort = person.by(Person::getFirstname).ascending().and(person.by(Person::getLastname).descending());
QSort sort = QSort.by(QPerson.firstname.asc()).and(QSort.by(QPerson.lastname.desc()));
- Sort: 여러 기준 결합 가능
- Type-safe API: 타입 안전한 정렬 API
- QSort (QueryDSL): QueryDSL을 통한 정렬 기준 설정
Sort (param)
public interface UserRepository extends JpaRepository<User, Long> {
@Query("select u from User u where u.lastname like ?1%")
List<User> findByAndSort(String lastname, Sort sort);
@Query("select u.id, LENGTH(u.firstname) as fn_len from User u where u.lastname like ?1%")
List<Object[]> findByAsArrayAndSort(String lastname, Sort sort);
}
예제) Limiting
더보기
Limit (param)
List<User> findByLastname(Limit limit);
Top & First (keyword)
User findFirstByOrderByLastnameAsc();
User findTopByOrderByAgeDesc();
Page<User> queryFirst10ByLastname(String lastname, Pageable pageable);
Slice<User> findTop3ByLastname(String lastname, Pageable pageable);
List<User> findFirst10ByLastname(String lastname, Sort sort);
List<User> findTop10ByLastname(String lastname, Pageable pageable);
'Spring > Spring Data JPA' 카테고리의 다른 글
[Spring Data JPA] 3-2. JPA Query Methods (2) (0) | 2024.08.02 |
---|---|
[Spring Data JPA] 3-2. JPA Query Methods (1) (0) | 2024.08.02 |
[자바 ORM 표준 JPA 프로그래밍] 10-3. 객체지향 쿼리 언어: QueryDSL (0) | 2024.08.02 |
[Spring Data JPA] 3-1. Defining Query Methods (2) (0) | 2024.08.02 |
[Spring Data JPA] 3-1. Defining Query Methods (1) (0) | 2024.08.02 |