gpt4 book ai didi

grails - 动态namedQueries

转载 作者:行者123 更新时间:2023-12-02 14:34:50 25 4
gpt4 key购买 nike

他们在grails上是动态的namedQuery吗?我不确定它是否正确,但是,我的意思是对所有人都适用的namedquery。

就像是:

namedQueries = {
dynamicQuery{ term, name, value ->
term(name, value)
}
}

然后可以将其称为,但不完全是:
def testClass = TestClass.dynamicQuery('eq', 'lastname', 'Bill').list()

所以您也这样称呼它:
def testClass = TestClass.dynamicQuery('gt', 'id', 12).list()

这可能不起作用,但是它们的用法相似吗?

更新
我的想法是,因此我可以根据需要随意链接它:
 def testClass = TestClass.dynamicQuery('gt', 'id', 12).dynamicQuery('eq', 'stat', 11).list()

这样一来,我不必创建许多命名查询。我希望可以创建一个并多次使用。

最佳答案

Grails的createCriteria方法生成Grails的HibernateCriteriaBuilder实例,您可以在其中调用invokeMethod方法来动态创建查询条件,该条件通常由标准DSL定义。

这是一些 Controller 中的示例:

private String dynamicCriteriaTest(String term, name,  value) {
def c = TestClass.createCriteria()
def param = []
param << name
param << value
def result = c.list{
c.invokeMethod(term, param as Object[])
}
return result.toString()
}

def test() {
render dynamicCriteriaTest('eq','lastname','Bill')
}

那会得到你想要的东西。

更新

如果要多次调用此方法,请在List中传递条件参数,然后执行查询:
    private List dynamicCriteriaTest(List param) {
def c = TestClass.createCriteria()
def paramList = param.collate(3) //split the parameters into groups
def result = c.list{
paramList.each { paramInstance ->
def command = paramInstance[0]
paramInstance.remove(0)
c.invokeMethod(command, paramInstance as Object[])
}
}
return result
}

def test() {
ArrayList param = new ArrayList()
//the 1st criteria
param << 'gt'
param << 'id'
param << (long)12 //you have to check the Grails [HibernateCriteriaBuilder] API to make sure the parameter passed to `invokeMethod` is in the right type (e.g. **long** in this case)

//the 2nd one
param << 'eq'
param << 'stat'
param << (long)11

//even more
param << 'like'
param << 'description'
param << 'some text%'

render dynamicCriteriaTest(param)
}

关于grails - 动态namedQueries,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15128944/

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