成都网站建设设计

将想法与焦点和您一起共享

Grails复用查询条件并分页的实现方法

本篇内容介绍了“Grails复用查询条件并分页的实现方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

创新互联主要从事网站设计、成都网站制作、网页设计、企业做网站、公司建网站等业务。立足成都服务仁布,十多年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:18980820575

  看过几篇写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;
	}

 这样就可以复用啦。

“Grails复用查询条件并分页的实现方法”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注创新互联网站,小编将为大家输出更多高质量的实用文章!


网页名称:Grails复用查询条件并分页的实现方法
网址分享:http://chengdu.cdxwcx.cn/article/gppphc.html