我一直在尝试为我的Grails项目添加搜索功能,而且我遇到了一些障碍。
这是我的域名
class Worker{
String name
}
这是我的控制器
package main
class SiteController {
def search()
{
def results = Worker.findAll{
it.name ==~ /.*John.*/
}
[results:results]
}
}
我试图找出如何使用findAll(闭包)功能,但我无法在任何地方找到示例,我也无法通过测试来解决这个问题,我只是我希望按照我在关闭时的测试标准找到所有工人。
编辑1
由于某些原因,我在我的正则表达式中使用任何特殊字符时会出现其他问题,例如[。 *?]或其中任何一个,我的发现都不会返回任何东西。如果我的工作人员名字是" John Smith"我做了
name ==~ /John Smith/
它可以正常工作,但如果我使用任何特殊字符,如
name ==~ /John.*/
甚至
name ==~ /John S.ith/
它不会起作用,这是非常令人困惑的,正则表达式应该在findall函数之外,如果你能提供一些非常有帮助的洞察力
答案 0 :(得分:4)
示例in the docs显示您直接引用该属性:
// Use where criteria (since Grails 2.0)
def results = Person.findAll {
lastName == "Simpson"
}
因此适用于您的查询:
def results = Worker.findAll{
name ==~ /.*John.*/
}
答案 1 :(得分:2)
请在查询中使用LIKE,试试这个:
results = Person.findAllByLastNameLike(“%John%”)
Grails在下面使用hibernate,它使用类似于SQL的HQL语言。或者,您也可以运行完整查询
results = Person.findAll(“from person as p where p.lastName LIKE:lastname order by p.lastName”, [姓氏:'%John%'])
寻找HQL查询: http://docs.jboss.org/hibernate/orm/3.3/reference/en-US/html/queryhql.html
令人遗憾但是真的,HQL / SQL不支持正则表达式,它只支持LIKE子句。