加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

grails – 基于传递给控制器??的params动态创建查询

发布时间:2020-12-14 16:28:56 所属栏目:大数据 来源:网络整理
导读:在我的任务管理应用程序中,用户应该能够根据:assignedTo,priority,status和/或dueDate过滤任务 我不确定如何创建动态查询,因为它将基于可用参数构建查询. 例如 : 如果我有一个URL,例如:task / index?assignedTo = 1 status = 2 我可以仅基于这两个参数构
在我的任务管理应用程序中,用户应该能够根据:assignedTo,priority,status和/或dueDate过滤任务

我不确定如何创建动态查询,因为它将基于可用参数构建查询.

例如 :

如果我有一个URL,例如:task / index?assignedTo = 1& status = 2

我可以仅基于这两个参数构建查询.我习惯的方法是

Task.findAllByAssignedToAndStatus(
   User.get(params.assignedTo),TaskStatus.get(params.status)
)

我显然不想通过为每个可能的URL参数组合写出每个findAllBy查询来实现DRY方法.

在grails中有一个很好的方法吗?

解决方法

我们已经在域类上实现了过滤器功能来执行此操作.简而言之,您将namedQueries的小片段添加到您的域类中.

例:

class Employee {

    String firstname
    String lastname
    Integer age

    static constraints = {
    }

    static namedQueries = {
        filteronFirstname { String inFirstname ->
            if (inFirstname&& inFirstname?.size() > 0) {
                ilike 'firstname',"%${inFirstname}%"
            }
        }

        filteronLastname { String inLastname ->
            if (inLastname && inLastname?.size() > 0) {
                ilike 'lastname',"%${inLastname}%"
            }
        }

        filteronAgeOlderThen { String ageOlderThen ->
            if (age && age ?.size() > 0) {
                gt 'age',ageOlderThen as Integer
            }
        }

    }
}

这样可以实现细粒度的过滤器功能,因此您可以构建一个使用所有过滤器方法的列表方法,并根据用户提供的输入将namedqueries连接在一起.

Employee.filteronFirstname("John").
filterOnLastname("Doe").
filteronAgeOlderThen("10").
list(params)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读