博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
grails的criteria实现复合查询并实现结果分页
阅读量:7109 次
发布时间:2019-06-28

本文共 993 字,大约阅读时间需要 3 分钟。

hot3.png

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参数,这样就不用在查询闭包里设置分页参数了

 

转载于:https://my.oschina.net/KingSirLee/blog/290352

你可能感兴趣的文章
tensorflow中张量、常量、变量、占位符
查看>>
在ajax请求后台时在请求标头RequestHeader加token
查看>>
SRM 408(1-250pt, 1-500pt)
查看>>
UGUI 之 控件以及按钮的监听事件系统 存档
查看>>
批量给文件或者文件夹重命名
查看>>
springMVC常用注解
查看>>
ORACLE SQL基础
查看>>
day58——Saltstack二次开发(二)
查看>>
各种算法
查看>>
asp.net文章内容分页方法
查看>>
NGUI 界面自适应
查看>>
一起学Django之Day01
查看>>
css垂直居中
查看>>
单元测试
查看>>
ASP.NET 开源 Blog 收集
查看>>
THIS关键字
查看>>
软件工程概论个人作业04(最大子数组)
查看>>
企业级 SpringBoot 教程 (二十)处理表单提交
查看>>
opencv +python 提取roi目标区域全部像素的值 得出上下限 均匀值
查看>>
Hbase
查看>>