文档章节

Grails 复用查询条件并分页

蘑菇头老大
 蘑菇头老大
发布于 2014/08/01 13:13
字数 319
阅读 71
收藏 0

  看过几篇写grails分页的,大都把简单的东西搞复杂了,而且里面都没有对查询条件复用,在分页时,求count和list的时候where条件是一样的,好点的程序员都会把where条件复用一下,在grails里面肯定是利用闭包特性重复利用了,看看下面的代码就懂了~

def serach = {
		if (!params.max) params.max = 10
		if (!params.offset) params.offset = 0
		if (!params.sort) params.sort = "id"
		if (!params.order) params.order = "asc"
		
		def cel = {
			if(params.name){
				like("name", "%${params.name}%")
			}
			if(params.city){
				like("city", "%${params.city}%")
			}
		}
		
		def results = User.createCriteria().list(params,cel)
//		def cut = User.createCriteria().count(cel)  
		[userInstanceList: results, userInstanceTotal: results.totalCount]
	}

 看到没,del闭包重复利用了~,另外需要说明下:在list的时候,会返回一个PagedResultList类型,里面就有totalCount属性,所以注释的那段代码不用写,不然会发3条SQL了。 这里主要是利用闭包复用查询条件演示了。

 

另外说下hibernate和ibatis里面的做法,hibernate一般这样干,封装个方法:

private Criteria getCriteria(Dept dept) {
		Criteria criteria = super.getSession().createCriteria(Dept.class);
		criteria.addOrder(Order.desc("id")); //倒序
		if (dept != null) {
			if (dept.getId() != null && dept.getId() > 0) {
				criteria.add(Restrictions.eq("id", dept.getId()));
			}
			if (StringUtils.isNotBlank(dept.getName())) {
				criteria.add(Restrictions.like("name", setPropertyValue(dept.getName())));
			}
			if(StringUtils.isNotBlank(dept.getDesp())){
				criteria.add(Restrictions.like("desp", setPropertyValue(dept.getDesp())));
			}
		}
		return criteria;
	}

 这样就可以复用啦。

ibatis里面见我另外一篇文章 :http://mmblue.iteye.com/blog/852168

© 著作权归作者所有

蘑菇头老大
粉丝 2
博文 20
码字总数 7628
作品 0
杭州
私信 提问
grials中List的totalCount属性

今天在对数据进行分页查询的时候,用了List的.count的属性,结果所有数据都被显示出来,限制条件没起作用。 后来查阅后发现,应该使用的是totalCount属性。 《grails技术精解与web开发实践》...

文七辰
2013/11/02
428
0
Grails 技巧 - GORM篇

1.不生成 version 字段 2.分页结果集列表 PagedResultList,非常适合分页查询 ` 为符合条件记录在数据库大小 3.使用proxy() 方法获取关联Domain author只是补助作用,不需要实际数据,如果用...

令狐小虫
2013/06/16
695
0
在 Grails 中使用 jQuery 和 DataTables

本文介绍如何构建一个基于 Grails 的数据浏览器来可视化复杂的表格数据。 我是 Grails 的忠实粉丝。当然,我主要是热衷于利用命令行工具来探索和分析数据的数据从业人员。数据从业人员经常需...

作者: Chris Hermansen
2018/11/24
0
0
grails的criteria实现复合查询并实现结果分页

def search = { if(!params.max) params.max = 10 if(!params.offset) params.offset = 0 def searchClosure = { if(params.categoryName) { category{ eq('categoryName', params.categoryN......

KingSirLee
2014/07/14
1K
0
请问grails 3.3 能使用grails 2.X 版本的插件吗

最近刚接触grails 3.3,以前一直用的GGTS ,grails2.3.8/2.4.4开发的东西,由于grails 2 的插件都不怎么更新了,所以想换最新版的。新建了个练手的项目 导入以前版本的分页插件的时候报了个 ...

wangcxjd
2017/09/04
171
0

没有更多内容

加载失败,请刷新页面

加载更多

java通过ServerSocket与Socket实现通信

首先说一下ServerSocket与Socket. 1.ServerSocket ServerSocket是用来监听客户端Socket连接的类,如果没有连接会一直处于等待状态. ServetSocket有三个构造方法: (1) ServerSocket(int port);...

Blueeeeeee
今天
6
0
用 Sphinx 搭建博客时,如何自定义插件?

之前有不少同学看过我的个人博客(http://python-online.cn),也根据我写的教程完成了自己个人站点的搭建。 点此:使用 Python 30分钟 教你快速搭建一个博客 为防有的同学不清楚 Sphinx ,这...

王炳明
昨天
5
0
黑客之道-40本书籍助你快速入门黑客技术免费下载

场景 黑客是一个中文词语,皆源自英文hacker,随着灰鸽子的出现,灰鸽子成为了很多假借黑客名义控制他人电脑的黑客技术,于是出现了“骇客”与"黑客"分家。2012年电影频道节目中心出品的电影...

badaoliumang
昨天
15
0
很遗憾,没有一篇文章能讲清楚线程的生命周期!

(手机横屏看源码更方便) 注:java源码分析部分如无特殊说明均基于 java8 版本。 简介 大家都知道线程是有生命周期,但是彤哥可以认真负责地告诉你网上几乎没有一篇文章讲得是完全正确的。 ...

彤哥读源码
昨天
15
0
jquery--DOM操作基础

本文转载于:专业的前端网站➭jquery--DOM操作基础 元素的访问 元素属性操作 获取:attr(name);$("#my").attr("src"); 设置:attr(name,value);$("#myImg").attr("src","images/1.jpg"); ......

前端老手
昨天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部