【问题标题】:Groovy domain class find with only provided filter仅使用提供的过滤器查找 Groovy 域类
【发布时间】:2017-04-08 11:21:16
【问题描述】:

你好

我需要在 Groovy 中对提供的过滤器字段执行域类过滤。 这是代码示例:

User.findAll(name: filter.name, age: filter.age, department: filter.department)

是否存在一些语法糖来帮助我验证例如 filter.name 是否没有提供,例如null 或空 - 不按此字段过滤。谢谢。

【问题讨论】:

  • 可以使用条件查询。

标签: grails groovy


【解决方案1】:

Abs 是正确的。以下是未提供过滤器字段的 if 语句示例:

User.createCriteria().list {
  if (filter.name)       eq("name", filter.name)
  if (filter.age)        eq("age", filter.age)
  if (filter.department) eq("department", filter.department)
}

【讨论】:

    【解决方案2】:

    您可以在参数映射上应用糖(假设过滤器是一个映射):

    def args = filter.collectEntries{ k, v -> 
      [ 'age', 'name', 'department' ].contains( k ) && v ? [ (k):v ] : Collections.EMPTY_MAP 
    }
    def users = User.findAll args
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-02
      • 2018-07-05
      • 1970-01-01
      • 2017-10-16
      • 2021-09-06
      • 2019-10-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多