7. Paging, Iterating Large Results, Sorting & Limiting
- 대규모 데이터 세트를 효율적으로 조회 및 처리
Page<User> findByLastname(String lastname, Pageable pageable);
Slice<User> findByLastname(String lastname, Pageable pageable);
List<User> findByLastname(String lastname, Sort sort);
List<User> findByLastname(String lastname, Sort sort, Limit limit);
List<User> findByLastname(String lastname, Pageable pageable);
Paging
Pageable (param)
- 페이징 정보 전달 (번호, 정렬 기준, 조회 결과 수)
- Sort, Limit와 함께 사용 X
Return type
- Slice<T>: 페이지 크기 + 1개 (다음 슬라이스 존재 여부 확인 O)
- Page<T>: 페이지 크기 + 전체 갯수 (전체 카운트 쿼리 실행 O)
Sorting
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);
}
Sort (new)
- 여러 기준 결합 가능
Sort sort = Sort.by("firstname").ascending().and(Sort.by("lastname").descending());
- type-safe API
TypedSort<Person> person = Sort.sort(Person.class);
Sort sort = person.by(Person::getFirstname).ascending().and(person.by(Person::getLastname).descending());
- 메타모델 타입 (QueryDSL)
QSort sort = QSort.by(QPerson.firstname.asc()).and(QSort.by(QPerson.lastname.desc()));
API
- field
repo.findByAndSort("lannister", Sort.by("firstname"));
- alias
repo.findByAsArrayAndSort("bolton", Sort.by("fn_len"));
- 함수 호출 포함 (JpaSort)
repo.findByAndSort("targaryen", JpaSort.unsafe("LENGTH(firstname)"));
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-4. 객체지향 쿼리 언어: QueryDSL (2) (0) | 2024.08.02 |
[자바 ORM 표준 JPA 프로그래밍] 10-4. 객체지향 쿼리 언어: QueryDSL (1) (0) | 2024.08.02 |
[Spring Data JPA] 3-1. Defining Query Methods (2) (0) | 2024.08.02 |