我是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
')如果我想一起使用“或”和“和”,我该怎么做?
答案 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之间的或