1.Grails提供了一个名为 grails-app/conf/Config.groovy 的文件用来进行一般性配置:
你可以在这里添加你自己的配置,例如:
foo.bar.hello = "world"
配置完成后你就可以在你的应用程序里使用两种方式来访问这些设置了。最常用是通过 GrailsApplication 对象,它可以在控制器或标记库中作为一个变量来使用:
assert "world" == grailsApplication.config.foo.bar.hello
2.GrailsApplication类可以提供Grails的会话的信息,例如:def bookClass = grailsApplication.classLoader.loadClass("Book")
3。集合类型和性能
Java中的 Set 是一个不能有重复条目的集合类型. 为了确保添加到 Set 关联中的条目是唯一的,Hibernate 首先加载数据库中的全部关联. 如果你在关联中有大量的条目,那么这对性能来说是一个巨大的浪费.
这样做就需要 List 类型, 因为Hibernate需要加载全部关联以维持供应. 因此如果你希望大量的记录关联,那么你可以制作一个双向关联以便连接能在反面被建立。例如思考一下代码:
def book = new Book(title:"New Grails Book")
def author = Author.get(1)
book.author = author
book.save()
在这个例子中关联链接被child (Book)创建,因此没有必要手动操作集合以使查询更少和高效代码。由于Author有大量的关联的Book 实例,如果你写入像下面的代码,你可以看到性能的影响:
def book = new Book(title:"New Grails Book")
def author = Author.get(1)
author.addToBooks(book)
author.save()
4。list方法的分页和排序方法:
list 方法支持分页参数:
def books = Book.list(offset:10, max:20)
也可以排序:
def books = Book.list(sort:"title", order:"asc")
5。
方法 描述
list 这是默认的方法。它会返回所有匹配的行。
get 返回唯一的结果集,比如,就一行。criteria已经规定好了,仅仅查询一行。这个方法更方便,免得使用一个limit来只取第一行使人迷惑。
scroll 返回一个可滚动的结果集
listDistinct 如果子查询或者关联被使用,有一个可能就是在结果集中多次出现同一行,这个方法允许只列出不同的条目,它等价于 CriteriaSpecification 类的DISTINCT_ROOT_ENTITY
6.立即加载:
static fetchMode = [flights:"eager"]
static mapping = {
flight fetch:"join"
}
static mapping = {
addresses lazy:false
}
7。
使用Flash作用域
Grails 支持 flash作用域的概念,它只用于临时存储用于这个请求到下个请求的属性,然后,这个属性就会被清除对于重定向前直接设置消息是非常有用的,例如:
def delete = {
def b = Book.get( params.id )
if(!b) {
flash.message = "User not found for id ${params.id}"
redirect(action:list)
}
… // remaining code
}