[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里面的人都很喜爱帮助别人,
|