/////
Search
Duplicate
6️⃣

정렬 지정하기

: 스프링 데이터 JPA는 두 가지 방법을 사용해서 정렬을 지정할 수 있다.
메서드 이름에 OrderBy를 사용해서 정렬 기준 지정
Sort를 인자로 전달
: 특정 프로퍼티로 조회하는 fnd 메서드는 이름 뒤에 OrderBy를 사용해서 정렬 순서를 지정할 수 있다.
public interface OrderSummaryDao extends Repository<OrderSummary, String> { List<OrderSummary> findByOrdererIdOrderByNumberDesc(String ordererld); }
Java
복사
: findByOrdererIdOrderByNumberDesc() 메서드는 다음 조회 쿼리를 생성한다.
ordererId 프로퍼티 값을 기준으로 검색 조건 지정
number 프로퍼티 값을 내림차순으로 정렬
: 두 개 이상의 프로퍼티에 대한 정렬 순서를 지정할 수도 있다.
: findByOrdererIdOrderByOrderDateDescNumberAsc()는 OrderDate 프로퍼티 기준으로 내림차순 정렬 후, Number 프로퍼티 기준으로 오름차순으로 정렬한다.
: 메서드 이름에 OrderBy를 사용하면 생기는 단점
간단하지만 정렬 기준 프로퍼티가 두 개 이상이면 메서드 이름이 너무 길어지는 단점이 있다.
메서드 이름으로 정렬 순서가 정해지기 때문에 상황에 따라 정렬 순서를 변경할 수도 없다.
⇒ 이럴 때는 Sort 타입을 사용하면 된다.
: 스프링 데이터 JPA는 정렬 순서를 지정할 때 사용할 수 있는 Sort 타입을 제공한다. 다음은 정렬 순서를 지정하기 위해 Sort 타입을 파라미터로 갖는 메서드의 예를 보여준다.
public interface OrderSummaryDao extends Repository(OrderSummary, String> { List<OrderSummary> findByOrdererId(String ordererId, Sort sort); List<OrderSummary> findAll(Specification<OrderSummary> spec, Sort sort); }
Java
복사
: find 메서드에 마지막 파라미터로 Sort를 추가하면 스프링 데이터 JPA는 파라미터로 전달받은 Sort를 사용해서 알맞게 정렬 쿼리를 생성한다. find 메서드를 사용하는 코드는 알맞은 Sort 객체를 생성해서 전달하면 된다.
Sort sort = Sort.by("number").ascending(); List<OrderSummary> results = orderSummaryDao.findByOrdererId("user1", sort);
Java
복사
: 만약 두 개 이상의 정렬 순서를 지정하고 싶다면 Sort#and() 메서드를 사용해서 두 Sort 객체를 연결하면 된다.
// 1번 Sort sort1 = Sort.by("number").ascending(); Sort sort2 = Sort.by("orderDate").descending(); Sort sort = sort1.and(sort2); // 2번 Sort sort = Sort.by("number").ascending().and(Sort.by("orderDate").descending());
Java
복사