grails2.1.1で追加されたfirst()、last()

grails2.1.1からドメインのメソッドにfirstとlastが追加されています。

http://grails.org/doc/latest/ref/Domain%20Classes/first.html
http://grails.org/doc/latest/ref/Domain%20Classes/last.html

使い方は

Book.first()
Book.first('title')
Book.first(sort: 'title')
Book.last()
Book.last('title')
Book.last(sort: 'title')

内部的にはlist()を使っていて、firstの方は昇順でソートして取得数1、lastは降順でソートして取得数1、という感じです。sortの引数を省略するとidでソートされる模様。

    ...
    D first(Map queryParams) {
        queryParams.max = 1
        queryParams.order = 'asc'
        if(!queryParams.containsKey('sort')) {
            def idPropertyName = persistentEntity.identity?.name
            if(idPropertyName) {
                queryParams.sort = idPropertyName
            }
        }
        def resultList = list(queryParams)
        resultList ? resultList[0] : null
    }
    ...
    D last(Map queryParams) {
        queryParams.max = 1
        queryParams.order = 'desc'
        if(!queryParams.containsKey('sort')) {
            def idPropertyName = persistentEntity.identity?.name
            if(idPropertyName) {
                queryParams.sort = idPropertyName
            }
        }
        def resultList = list(queryParams)
        resultList ? resultList[0] : null
    }
    ...