使用Grails(或hibernate),我想知道在实现域的搜索时是否应该使用特定的设计模式或方法。
例如,在我的网站上,我希望能够通过域中的多个属性进行过滤(或搜索)。
EG:因为我有一个显示酒店列表的页面。当我提交搜索表单时,或者如果用户点击"按名称过滤=' blah'",当我进入控制器时,我会得到以下内容:
Domain
String name
String location
Controller
if(params.name && params.reference) {
// Find name/reference
} else if(params.name) {
// Find name
} else if(params.reference) {
// Find reference
} else {
// Find all
}
如您所知,如果域中有更多属性要搜索/过滤,控制器获取的时间就越长。
任何帮助。请注意,我不想使用可搜索的'插件,因为这对我的需求来说太复杂了。
答案 0 :(得分:3)
我会将这些嵌入到Domain类本身的a named query中。例如:
Class Hotel {
String name
String city
String country
boolean isNice
static namedQueries = {
customSearch { p ->
if (p?.name) eq('name', p.name)
if (p?.city) eq('name', p.city)
if (p?.country) eq('name', p.country)
if (p?.isNice != null) eq('isNice', p.isNice)
}
}
}
然后在控制器的某个地方......
def results = Hotel.customSearch(params)
当然这是一个非常简单的示例,但您可以使用相同的命名查询进行扩展,甚至可以添加其他查询并将它们链接在一起。