Grails技巧系列——GORM中select结果进行count的方法
2013-05-02 15:13
246 查看
《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的人的数量。
以上例子可以看出,这种提取搜索结果数量的方式,主要针对某一个表的搜索,而在实际的商业开发中,有很多数据搜索是相对复杂的。需要对多个表进行结合,或者,需要通过与子搜索结合起来才能得到搜索结果。
对于前者,可以通过设定目标之间的关系,通过载入功能就可以实现。但是,后者需要使用子查询的情况就是GORM难以实现的了。这一点是由于GORM内核本身是基于Hibernate的缘故,不但继承了强大的O/R优点,同时也继承了无法使用子查询的软肋。
这种情况,我个人的做法是使用Groovy访问数据库功能,直接执行select语句,提取执行结果,做法如下: 1.首先在相应的service类中定义
2.在service类中相应的方法内,类似以下执行并返回结果
这段代码是 番茄CMS在提取分类中文章数量的一段处理。
(当然,通常的网站在搜索文章数量是并不需要这么复杂,因为番茄CMS的功能比较多,数据结构比较特殊,所以只能用子查询。) 以上是笔者在Grails开发中用过的搜索count的方法,希望能给大家帮助。
原文地址:http://www.loveapple.cn/app/Grails/grails-chips-gorm-sql-count
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
相关文章推荐
- 搜索执行Grails技巧系列——GORM中select结果进行count的方法
- 在"Select top 2 * from news order by count"进行筛选时,如果count值有重复时,则筛选结果将不是2条记录,这个问题该怎么解决?
- 如何让SELECT 查询结果额外增加自动递增序号_SQL技巧
- MYSQL中统计查询结果总行数的便捷方法省去count(*)
- 对《如何加快C++代码的编译速度的几种技巧》文中提到的方法进行思考
- MYSQL中统计查询结果总行数的便捷方法省去count(*)
- MySQL中在含有GROUP BY的SELECT语句中显示COUNT()为0的结果
- 对于不允许使用开源标签进行select选中的js替代方法
- mysql合并 两个count语句一次性输出结果的方法
- java集合系列二:多种方法进行collection遍历,并封装为公共方法
- 【SQL】在含有GROUP BY的SELECT语句中如何显示COUNT()为0的结果
- eclipse插件Maven添加依赖查询无结果的解决方法(Select Dependency doesn't work)
- mysql技巧之select count的区别分析
- 对查询结果进行分页的方法
- [Oracle] “表中有数据,但select count(*)的结果为0”问题的解决办法
- ASP中获得Select Count语句返回值的方法
- Office系列软件安装后,每次打开都需要进行长时间配置的解决方法
- 对DataTable进行过滤筛选的一些方法Select,dataview(转载)
- [MySQL FAQ]系列 -- 为何innodb表select count(*)很慢
- eclipse插件Maven添加依赖查询无结果的解决方法(Select Dependency doesn't work)