[Grails] 关于grails中进行数据库查询top n的探讨

leero 2009-09-21
最近自己折腾一个东西,想实现类似对应到mysql中的查询select * from fundstat where t = 'aaa' order by createdate limit 10;

首先想到的是使用criteria,结果只做了where部分,后面的order及limit就不懂了,是否是grails中不提供这个方法还是我不知道,

其次想到用动态查询器,貌似动态查询器没有order功能,

第三想到直接用Fundstat.list(),【Fundstat是domain class】设置max,sort,但是不知道where怎么设置,

第四使用(new groovy.sql.Sql(dataSource)).eachRow("select * from fundstat where t = 'aaa' order by createdate limit 10;"){},这似乎是原始社会的方法,并且不能把结果列表映射为实体列表,
本人学grails不久,希望大虾前辈能分享你的经验下,


romejiang 2009-09-22
def c = Account.createCriteria()
def results = c.list {
like("holderFirstName", "Fred%")
and {
between("balance", 500, 1000)
eq("branch", "London")
}
maxResults(10)
order("holderLastName", "desc")
}

maxResults 相当于你说的top n,hibernate会根据不同的数据库输出成limit或其他
romejiang 2009-09-22
你的需要这样就可以了。

def Fundstats = Fundstat.findAllByT('aaa',max: 10)

加上排序:
def Fundstats = Fundstat.findAllByT('aaa',max: 10,order:'asc' ,sort: 'createdate')
leero 2009-09-22
学习了,看来我真是没学到家,我就学了点皮毛就出来叫嚣,发现je里面的人都很喜爱帮助别人,
Global site tag (gtag.js) - Google Analytics