搜索执行Grails技巧系列——GORM中select结果进行count的方法

近期个人几篇文章分析了改搜索执行的文章. 关联文章的址地

    《Grails技能系列》将分析笔者在Grails开辟中结总的一些教训。这里将免避复重官方文档中的容内,希望可以以短小的文章给读者更多有价值的容内。 

    

    

    GROM是Grails架框供给的一种O/R Mapping的解决方案。通过GROM可以脱摆繁琐的SQL写书,并且根据搜索到的结果主动生成Groovy实现,可以省去据数拜访层代码的开辟,轻减程序员的工作量。Java中的JDO、S2JDBC都是此类架框,而GROM的底层是Hibernate 3,是一种非常普遍于用Java开辟的据数层架框。 

    

    (关于GROM的详细用使方法请参考 Grails官方的 

    《Grails用户手册》

    ,这里不作多过描述。) 

    

    

    GROM供给了很多执行SQL语句的接口,括包用slect语句得取count的结果,如用使上面的代码,可以到得姓Simpson的人的量数。 

    

    

    def criteria = new DetachedCriteria(Person).build { eq 'lastName', 'Simpson' } 

    def results = criteria.list(max:4, sort:"firstName") 

    

    

    

    以上例子可以看出,种这提取搜索结果量数的式方,要主针对某一个表的搜索,而在际实的贸易开辟中,有很多据数搜索是绝对庞杂的。须要对多个表停止结合,或者,须要通过与子搜索结合起来才能到得搜索结果。 

    

    对于前者,可以通过设定目标之间的关系,通过载入能功以可就实现。但是,后者须要用使子查询的情况就是GORM难以实现的了。这一点是由于GORM内核本身是基于Hibernate的原因,不但继承了壮大的O/R点优,同时也继承了法无用使子查询的软肋。 

    每日一道理
共和国迎来了她五十诞辰。五十年像一条长河,有急流也有缓流;五十年像一幅长卷,有冷色也有暖色;五十年像一首乐曲,有低音也有高音;五十年像一部史诗,有痛苦也有欢乐。长河永远奔流,画卷刚刚展开,乐曲渐趋高潮,史诗还在续写。我们的共和国正迈着坚定的步伐,跨入新时代。

    

    种这情况,我个人的做法是用使Groovy拜访据数库能功,直接执行select语句,提取执行结果,做法如下: 1.首先在应相的service类中定义 

    

    def dataSource

    

    ,Grails在执行时会主动将你的DataSouce插入进去 

    

    2.在service类中应相的方法内,似类以下执行并返回结果 

    

    

    def sql = new Sql(dataSource)

    def result = sql.firstRow('select count(*) as c from (select max(c.id) from loveapple_contents c, loveapple_site s\

    where s.id = parent_site_id and s.id = ? and parent_category_alias = ? group by c.alias) t' ,

    [site.id, categoryAlias]) return result 

    

    

    

    这段代码是 

    番茄CMS

    在提取分类中文章量数的一段处置。 

    

    (当然,常通的网站在搜索文章量数是并不须要这么庞杂,因为番茄CMS的能功比拟多,据数结构比拟殊特,所以只能用子查询。) 以上是笔者在Grails开辟中用过的搜索count的方法,希望能给大家助帮。

    

    原文址地:http://www.loveapple.cn/app/Grails/grails-chips-gorm-sql-count

文章结束给大家分享下程序员的一些笑话语录: 问路
有一个驾驶热气球的人发现他迷路了。他降低了飞行的高度,并认出了地面 上的一个人。他继续下降高度并对着那个人大叫,“打扰一下,你能告诉我我 在哪吗?”
下面那个人说:“是的。你在热气球里啊,盘旋在 30 英尺的空中”。
热气球上的人说:“你一定是在 IT 部门做技术工作”。
“没错”,地面上的人说到,“你是怎么知道的?”
“呵呵”,热气球上的人说,“你告诉我的每件事在技术上都是对的,但对都没 有用”。
地面上的人说,“你一定是管理层的人”。
“没错”,热气球上的人说,“可是你是怎么知道的?”
“呵呵”,地面上的那人说到,“你不知道你在哪里,你也不知道你要去哪,你 总希望我能帮你。你现在和我们刚见面时还在原来那个地方,但现在却是我 错了”。

原文地址:https://www.cnblogs.com/xinyuyuanm/p/3055217.html