Grails 로 프로젝트를 진행하면서 궁금했던 점, 알게된 팁을 공유합니다.
이번에는 Domain 에 대한 list 조회 시 기본 정렬방식을 설정하는 방법입니다.
조회할 때 동적인 조회 방식을 위해서 createCriteria().list 를 많이 사용합니다.
여기서 sort, order 가 없을 때, 기본적은 정렬방식을 설정해도 되지만, Domain 자체에 정렬방식을 선언할 수 있습니다.
방식은 다음과 같습니다.
일단 Domain 하나를 살펴봅시다.
class Product implements Record {
String code
String name
String standard
Manufacture manufacture
static constraints = {
code nullable: false
name nullable: false
standard nullable: true
manufacture nullable: true
}
}
본 Domain 은 간단한 상품 정보를 가지고 있는 Domain 입니다.
code, name, standard 등이 보이는데, 이중에서 code, name 등으로 기본 정렬을 선언하고 싶은 겁니다.
static mapping 을 이용하여 기본 정렬방식을 구현할 수 있습니다.
아래 추가된 코드를 확인해 봅시다.
class Product implements Record {
String code
String name
String standard
Manufacture manufacture
static constraints = {
code nullable: false
name nullable: false
standard nullable: true
manufacture nullable: true
}
static mapping = {
sort name: 'asc'
}
}
추가된 코드는 파란색으로 표시하였습니다.
요렇게 static mapping 내부에 sort 를 선언합니다. 쿼리와 비슷하게 name 을 ascending 한다는 의미입니다.
그렇다면 1개의 property 가 아닌 2개 이상의 property 에 대해서 기본 정렬방식을 선언하고 싶은 경우도 있을 겁니다.
아래의 추가된 코드를 확인해 봅시다.
class Product implements Record {
String code
String name
String standard
Manufacture manufacture
static constraints = {
code nullable: false
name nullable: false
standard nullable: true
manufacture nullable: true
}
static mapping = {
sort([code: 'asc', name: 'asc'])
}
}
방금 전과 조금 다른 sort 가 선언되어있지만, 힘들지 않은 코드입니다.
sort() 함수에 배열을 전달하는 방식으로 변경되었네요.
요렇게 구현하면 쿼리에서 ORDER BY CODE ASC, NAME ASC 를 선언한 것과 동일하게 list 를 조회할 수 있습니다.
'asc' 는 다들 알고 있듯이 순방향 정렬(내림차순) 으로 정렬합니다.
역방향 정렬(오름차순)으로 정렬하고 싶다면, 'desc'를 사용하면 되겠지요?
이상으로 Grails 의 Domain 에서 기본 정렬방식을 선언하는 방법이었습니다.
Grails 의 Criteria 를 사용한 동적 쿼리 생성이 너무 강력해서, 할일이 점점 줄어듭니다.