티스토리 뷰

IT

Grails Domain 기본 정렬(sort) 설정

Dante2k™ 2018.04.12 18:51

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 를 사용한 동적 쿼리 생성이 너무 강력해서, 할일이 점점 줄어듭니다.

댓글
댓글쓰기 폼