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.categoryName);
                }
            }
            if(params.title) {
                like(‘title‘,"%${params.title}")
            }
            if(params.priceLow) {
                ge(‘price‘, new BigDecimal(params.priceLow))
            }
            if(params.priceHigh) {
                le(‘price‘, new BigDecimal(params.priceHigh))
            }
            if(params.description) {
                like(‘description‘, "%${params.description}")
            }
        }
        def c = Goods.createCriteria();
        params.sort = "price"
        params.order = "asc"
        def goodList = c.list (params, searchClosure)
//        def goodsCount = c.count (searchClosure)
        def goodsCount = goodList.totalCount
        println goodsCount
        render (view: ‘list‘, model: [goodsInstanceList: goodList, goodsInstanceTotal: goodsCount])
    }

使用闭包封装查询条件如上面的searchClosure闭包,这样就可以重复使用查询条件了,
在list的时候会返回一个PagedResultList类型,里面就有totalCount属性,表示符合查询条件的记录数,这样就不用count了。在list的时候可以传入分页参数组成的map如上面的params参数,这样就不用在查询闭包里设置分页参数了

grails的criteria实现复合查询并实现结果分页

时间: 2024-08-29 10:54:15

grails的criteria实现复合查询并实现结果分页的相关文章

grails的criteria和hql查询

grails在查询方面也保留了hibernate的hql和criteria查询功能,hql自然不必多说基本不会有什么变化,grails的criteria查询在hibernate上面做了微调使用起来更加方便了,这次就这两个特点分享下我这几天的所学 1.grails的criteria查询 先来个简单的,通过criteria来构造一个in条件查询 def useCriteria2(){ def c=CityInfo.createCriteria() def result=c.list{ 'in'("i

Hibernate的几种查询方式-HQL,QBC,QBE,离线查询,复合查询,分页查询

HQL查询方式 这一种我最常用,也是最喜欢用的,因为它写起来灵活直观,而且与所熟悉的SQL的语法差不太多.条件查询.分页查询.连接查询.嵌套查询,写起来与SQL语法基本一致,唯一不同的就是把表名换成了类或者对象.其它的,包括一些查询函数(count(),sum()等).查询条件的设定等,全都跟SQL语法一样. 示例: Session session = SessionFactory.getCurrentSession(); User user = null; Transaction ts = s

hibernate Criteria(条件查询接口)

Criteria(条件查询接口) // 1.简单查询 List<Customer> list = session.createCriteria(Customer.class).list(); // 2.条件查询: Criteria criteria = session.createCriteria(Customer.class); criteria.add(Restrictions.eq("name","芙蓉")); List<Customer&g

thinkphp 区间查询 组合查询 复合查询 动态查询 SQL查询

区间查询 默认使用AND 在最后面元素加上OR  SELECT * FROM `weibo_user` WHERE ( `id` > 1 OR `id` < 3 ) $map['id']=array(   array('gt',1),   array('lt',3),     'OR' ); 组合查询  SELECT * FROM `weibo_user` WHERE `id` = 1 OR ( username = "bnbbs" AND email like "

【Mybatis】【3】mybatis Example Criteria like 模糊查询

正文: 在Java中使用Mybatis自动生成的方法,like需要自己写通配符 public List<TableA> query(String name) { Example example = new Example(TableA.class); example.createCriteria() .andLike("name", "%"+ name +"%"); example.setOrderByClause("CRE

Elasticsearch(7) --- 复合查询

Elasticsearch(7) ---复合查询 复合查询有:bool query(布尔查询).boosting query(提高查询).constant_score(固定分数查询).dis_max(最佳匹配查询).function_score(函数查询). 一.bool query(布尔查询) 1.概念 定义 可以理解成通过布尔逻辑将较小的查询组合成较大的查询. Bool查询语法有以下特点 子查询可以任意顺序出现 可以嵌套多个查询,包括bool查询 如果bool查询中没有must条件,shou

随便说说Spring Data JPA(包含分页,复合查询)

最近没事做,闲着也是闲着,随便写写,自己说说,不提供参考价值. Spring Data JPA是Spring Data家族的一部分,可以轻松实现基于JPA的存储库. 此模块处理对基于JPA的数据访问层的增强支持. 它使构建使用数据访问技术的Spring驱动应用程序变得更加容易. 在相当长的一段时间内,实现应用程序的数据访问层一直很麻烦. 必须编写太多样板代码来执行简单查询以及执行分页和审计. Spring Data JPA旨在通过减少实际需要的工作量来显著改善数据访问层的实现. 作为开发人员,您

[原创]java WEB学习笔记92:Hibernate学习之路-- -QBC 检索和本地 SQL 检索:基本的QBC 查询,带 AND 和 OR 的QBC,统计查询,排序,分页

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 -----------------------------------------------------------------------------------------------------------------

easyui将查询参数绑定到分页控件

一 在进行条件查询(带分页)时,有时候会出现一种情况:根据查询条件查找得到第一页数据,当你点击下一页后,不会携带查询条件进行分页. 解决方案: 获取查询条件   var data=$('#search').serializeJson(); 将查询条件绑定到分页控件上 var queryParams = $('#datagrid_id').datagrid('options').queryParams;//获取查询参数,接下来就是设置进去 for (var temp in data) {