Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Grails “关于圣杯的新手问题”;“创建标准”;_Grails_Criteria - Fatal编程技术网

Grails “关于圣杯的新手问题”;“创建标准”;

Grails “关于圣杯的新手问题”;“创建标准”;,grails,criteria,Grails,Criteria,我是Grails criteria builder的新手,有人能解释一下下面的意思吗 def c = Account.createCriteria() def results = c { like("holderFirstName", "Fred%") and { between("balance", 500, 1000) eq("branch", "Lon

我是Grails criteria builder的新手,有人能解释一下下面的意思吗

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

             like("holderFirstName", "Fred%")
             and {
                 between("balance", 500, 1000)
                 eq("branch", "London")
             }
             maxResults(10)
             order("holderLastName", "desc")
         }
这意味着什么

  • 从帐户中选择*
    holderFirstName如“fred%”和
    (余额在500和1000之间**和**
    分行(伦敦
  • 从帐户中选择*
    holderFirstName如“fred%”和
    (余额在500和1000之间**或**
    分行(伦敦

如果我想同时使用“或”和“和”怎么做?

您的示例将执行为:

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")
}

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

您的示例将按以下方式执行:

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")
}

将您的
/
闭包嵌套在更复杂的标准中。

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

从帐户中选择*,其中holderFirstName(如“fred%”和(余额介于500和1000之间)是正确的,只是它最多可以保存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之间的您当前的标准在平衡和分支的两种情况下表示“和”。所以

从帐户中选择*,其中holderFirstName(如“fred%”和(余额介于500和1000之间)是正确的,只是它最多可以保存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之间的