(JPA,SpringData) Sort 사용하기

|

일반적으로 JPA에서 Sort기능을 사용하기 위해서 아래와 같이 메서드명에 OrderBy를 붙여 사용합니다.

public Page<T> findAllByNameOrderByCreatedDateDesc();

이와 같이 만드는 경우 일반적인 목록조회 페이지에서 다수의 정렬기능(ex:이름순,날짜순,날짜역순…)을 필요로 할 경우 위와 같은 메소드를 정렬 방식 개수대로 만들어야 하는 단점이 있습니다. 이 때 사용하기 좋은것이 Sort클래스입니다. Controller에 아래와 같이 인자값으로 등록만 하면 알아서 정렬정보가 세팅됩니다.

@Controller
public List<T> list(Sort sort)
{
  List<T> tList = jpaRepository.findAll(sort);
  return tList;
}

파라메터 형식은 아래와 같이 넘길 수 있습니다.

[이름으로 정렬]
/path?sort=name,asc
[이름 역순으로 정렬]
/path?sort=name,desc
[이름으로 정렬 + ID로 정렬]
/path?sort=name,id
[이름으로 정렬 + ID 역순으로 정렬]
/path?sort=name,asc&sort=id,desc

파라메터에서 전달받은 정렬조건외에 추가적으로 정렬조건을 추가하고 싶을 경우 아래와 같이 and메소드를 이용하여 추가적으로 정렬조건을 넣을수 있습니다.

@Controller
public List<T> list(Sort sort)
{
  sort = sort.and(new Sort(Sort.Direction.DESC, "count"))
  List<T> tList = jpaRepository.findAll(sort);
  return tList;
}

보통 목록에서 정렬은 paging과 같이 하는 경우가 많은데 아래와 같이 Pageable을 인자값으로 받으면 자동적으로 정렬값이 추가됩니다.

@Controller
public List<T> list(Pageable pageable)
{
  List<T> tList = jpaRepository.findAll(pageable);
  return tList;
}

참고 : Spring Data JPA Tutorial: Sorting

Comments