gpt4 book ai didi

grails - 如何建立条件查询以获取我的域的数据

转载 作者:行者123 更新时间:2023-12-02 15:21:31 25 4
gpt4 key购买 nike

我知道这一定很容易,但是我是新手,我找不到明确的答案。我想做的是读取并获得一个标准查询,以查询我在域中拥有的数据以搜索每个参数。

这是我的域人员:

    String name
String surname
String address
String village
String country

这是我正在尝试做的事情:
def getData = Person.createCriteria()

我在日志中看到我有一个对象(com.mypackagename.Person:1),但是没有数据库中的数据。示例(myname,mysurname,myaddress,myvillage,mycountry)

我的数据库中只有一行数据,我想获取每一列的数据并搜索每个参数

提前致谢。

最佳答案

让我先向您展示代码,然后再解释一下:

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.
}
}

好的,假设您有一个 Controller 方法(例如 search()),该方法从用户那里接收查询参数。参数将在 params映射中。例如,如果用户搜索名称John和国家(美国),则 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术语的条件查询。

关于grails - 如何建立条件查询以获取我的域的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35181135/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com