我发现在 Groovy SQL 中可以做到这一点真的很酷:
def resultList = Domain.executeQuery('select * from languages where name = :name', [name: 'Groovy'])
我正在尝试让 HQL“in”关键字与用作参数的动态列表一起使用,而不是固定列表。
我也知道你可以使用“?” SQL 参数的运算符,而不是使用命名参数。但是根据这个问题:
Doing an "IN" query with Hibernate
“in”关键字只支持命名参数和位置参数,不支持“?”范围。问题是,当我尝试做这样的事情时:
def paramMap = [:]
paramMap.put("name", "groovy")
def resultList = Domain.executeQuery('select * from languages where name = :name', paramMap)
我收到一条错误消息,说我没有指定参数名称。所以就好像我没有实际指定参数“名称”一样。我在这里阅读了关于命名参数的 Groovy 文档:
http://groovy.codehaus.org/api/groovy/sql/Sql.html
但是所有使用命名参数的示例都使用预定义的参数列表。我已经搜索并没有找到使用动态参数列表映射的示例。如何将参数的动态映射传递给 Groovy 命名 SQL 查询?如果那不可能,我如何在动态列表中使用“in”关键字?
需要说明的是,我正在构建一个动态 SQL 查询,并且我希望能够在进行过程中将参数添加到 map 或列表中。我之前使用的是“?”运算符,直到我不得不使用“in”子句,它不适用于“?”。
最佳答案
为什么不尝试使用闭包查找所有内容?
def paramMap = [:]
paramMap.put("name", "groovy")
def resultList = Domain.findAll {
paramMap.containsValue(name)
}
这是文档,希望对您有所帮助! http://grails.org/doc/latest/ref/Domain%20Classes/findAll.html
关于sql - Groovy 中的动态命名参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24143654/