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) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |