关于grails“createCriteria”的新手问题

时间:2011-06-03 03:56:40

标签: grails criteria

我是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')

如果我想一起使用“或”和“和”,我该怎么做?

2 个答案:

答案 0 :(得分:8)

您的示例将执行为:

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个关闭嵌套到更复杂的条件中。

答案 1 :(得分:2)

您目前的标准在平衡和分支两个条件中意味着“和”。所以

从账户中选择*,其中holderFirstName如'fred%'和(500到1000之间的平衡 branch ='london')是正确的,只是它将保持最多10个结果并将被排序在“holderLastName”的基础上降序排列。

要同时使用以及,您还需要在条件中指定块,因此您的条件看起来像

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之间的