我知道必须非常轻松,但我是grails的新手,我找不到任何明确的答案。我想要做的是阅读并获得条件查询我在我的域中的数据搜索每个参数。
这是我的域名人员:
String name
String surname
String address
String village
String country
这就是我要做的事情:
def getData = Person.createCriteria()
我可以在日志中看到我有一个对象(com.mypackagename.Person:1。),但不是我在数据库中拥有的数据。例子(myname,mysurname,myaddress,myvillage,mycountry)
我的数据库中只有一行数据,我想获取每列的数据并搜索每个参数
提前致谢。
答案 0 :(得分:1)
让我先告诉你代码,然后我会解释一下:
class SomeController {
def search() {
def people = Person.withCriteria {
params
.findAll { name, value -> name in ['name', 'surname', 'address', 'village', 'country'] }
.each { name, value -> eq(name, value) }
}
// Do as you please with 'people'; a list of Person instances.
}
}
好的,我们假设你有一个控制器方法(例如search()
),它接收来自用户的查询参数。参数将在params
地图中。例如,如果用户搜索名称 John 且国家/地区 USA ,则params
将如下所示:[name: 'John', country: 'USA']
。即使有其他可用的搜索参数,我们也不会使用它们,因为用户没有指定它们。
在条件查询中,首先搜索您关心的param
键/值对; Person
的可搜索属性。然后,对于每个对,调用eq(String propertyName, Object value)
来设置查询条件(WHERE子句)。
使用示例数据,Hibernate将生成如下所示的SQL:
SELECT name, surname, address, village, country
FROM person
WHERE name = 'john' AND country = 'USA'
就是这样!
注意:您将在日志中看到相同的输出(例如com.mypackagename.Person:1)。那是因为你正在记录personInstance.toString()
。因此,如果您希望日志条目看起来不同,则需要覆盖Person.toString()
非常简单的方法来解决这个问题,即使用Groovy的@ToString AST。
有关创建条件查询的更多信息,请查看我的articles系列。我使用SQL术语覆盖标准查询。
答案 1 :(得分:0)
尝试使用:
def persons = Person.createCriteria().list{}
或者如果您只想要一个结果:
def persons = Person.createCriteria().list {
maxResults 1
}