#grails #criteria
#grails #критерии
Вопрос:
Я новичок в 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")
}
Означает ли это
Select * from account where
‘)
holderFirstName like 'fred%' and
(balance between 500 and 1000 **and**
branch='londonSelect * from account where
‘)
holderFirstName like 'fred%' and
(balance between 500 and 1000 **or**
branch='london
Если я хочу использовать «или» и «и» вместе, как мне это сделать?
Ответ №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:
Ваши текущие критерии означают «и» в двух условиях баланса и ветвления. итак
Выберите * из учетной записи, в которой указано имя владельца, например ‘fred%’ и (баланс от 500 до 1000 и филиал = ‘лондон’), правильно, просто оно будет содержать максимум 10 результатов и будет отсортировано на основе «Последнего имени владельца» в порядке убывания.
Для совместного использования and и or вам также необходимо указать блок or в критериях, чтобы ваши критерии выглядели примерно так
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