假设我有这个域类:
class Person{
String name
String street
String gender
String foo
String bar
...
}
是否有一种简单的方法可以搜索每个属性(因此我只需调用一种方法即可Persons
或name
或street
来搜索gender
。像String s
)?
如果没有:是否有比做更好的方式:
Person.findByName(s)
Person.findByStreet(s)
...
答案 0 :(得分:1)
上述答案的替代方法是使用标准。
您的代码如下
String searchTerm = "something"
def criteria = Person.createCriteria()
def query = {
or{
ilike('name', "%${searchTerm}%") //Case insensitive like
ilike('gender', "%${searchTerm}%")
ilike('foo', "%${searchTerm}%")
ilile('bar', "%${searchTerm}%")
...
}
}
def personInstanceTotal = Documento.createCriteria().count(query) //Returns the filtered count
def personInstanceList = Documento.createCriteria().list(params, query) //May return the paged results
现在你可能会注意到一个名为 params 的变量。 Params是您通常在控制器中使用的params映射。使用g:pagination和g:sortableColumn时,您可以在params映射中获得[max:,offset:,order:,sort:]值。如果您将这些传递给标准,您将自动获得一些分页结果。
这可能看起来不像其他选项那么简单,但在处理更复杂的查询时它可以非常灵活。还有可能在de query = {}声明中使用ifs,它可以变得非常方便。
答案 1 :(得分:0)
使用Person.where {
name ==~ s || street ==~ s || gender ==~ s || foo ==~ s || bar ==~ s
}.get()
查询:
=~
对于不区分大小写,可以使用 ==~
代替Color c = new Color(image.getRGB(x, y));
。
答案 2 :(得分:0)
我建议使用grails elastic search plugin
您可以通过添加属性
使您的域可搜索class Person{
String name
String street
String gender
String foo
String bar
...
static searchable = true
}
您还可以包含/排除字段
class Person{
String name
String street
String gender
String foo
String bar
...
static searchable = {
except = 'foo'
}
}