【问题标题】:Newbie question on grails "createCriteria"关于 grails“createCriteria”的新手问题
【发布时间】:2011-06-03 03:56:40
【问题描述】:

我是 Grails 标准构建器的新手,有人可以解释一下以下是什么意思吗?

def c = Account.createCriteria()
         def results = c {

             like("holderFirstName", "Fred%")
             and {
                 between("balance", 500, 1000)
                 eq("branch", "London")
             }
             maxResults(10)
             order("holderLastName", "desc")
         }

是什么意思

  • Select * from account where holderFirstName like 'fred%' and (balance between 500 and 1000 **and** branch='london')
  • Select * from account where holderFirstName like 'fred%' and (balance between 500 and 1000 **or** branch='london')

如果我想同时使用 "or" 和 "and" 我该怎么做?

【问题讨论】:

    标签: grails criteria


    【解决方案1】:

    您的示例将执行为:

    select * from account 
    where holderFirstName like 'Fred%' 
    and balance between 500 and 1000 
    and branch = 'London'
    

    所有顶级条件都被暗示为“与”在一起。您可以创建与以下相同的条件:

    def c = Account.createCriteria()
    def results = c {
        like("holderFirstName", "Fred%")
        between("balance", 500, 1000)
        eq("branch", "London")
        maxResults(10)
        order("holderLastName", "desc")
    }
    

    要获得第二个查询,请使用此条件:

    def c = Account.createCriteria()
    def results = c {
        like("holderFirstName", "Fred%")
        or {
            between("balance", 500, 1000)
            eq("branch", London")
        }
        maxResults(10)
        order("holderLastName", "desc")
    }
    

    嵌套您的 and / or 闭包以获得更复杂的条件。

    【讨论】:

      【解决方案2】:

      您当前的标准在平衡和分支这两个条件中表示“和”。所以

      Select * from account where holderFirstName like 'fred%' and (balance between 500 and 1000 and branch='london') 是正确的,只是它最多可以容纳 10 个结果并将被排序根据“holderLastName”降序排列。

      要将 andor 一起使用,您还需要在条件中指定 or 块,因此您的条件类似于 p>

      Account.createCriteria()
               def results = c {
      
                   like("holderFirstName", "Fred%")
                   and {
                       between("balance", 500, 1000)
                       eq("branch", "London")
                   }
                   or{
                       eq("prop1", prop1)
                       eq("prop2",prop2)
                   }
                   maxResults(10)
                   order("holderLastName", "desc")
               }
      

      在此标准中,平衡条件和分支条件之间存在。也是prop1和prop2之间的

      【讨论】:

        猜你喜欢
        • 2012-11-17
        • 2011-02-01
        • 2011-02-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-30
        • 2011-11-11
        相关资源
        最近更新 更多