千家信息网

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

发表于:2024-11-24 作者:千家信息网编辑
千家信息网最后更新 2024年11月24日,本篇内容介绍了"Grails复用查询条件并分页的实现方法"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成
千家信息网最后更新 2024年11月24日Grails复用查询条件并分页的实现方法

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

看过几篇写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复用查询条件并分页的实现方法"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

0