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