Fab*_*ier 2 grails groovy grails-orm groovyclassloader
我试图建立一个类似于的动态查询:
def domain = DomainName
def ids = 1
def domainClass = "$domain" as Class
domainClass.find("from ${domain} as m where m.job = ${ids} ").id
Run Code Online (Sandbox Code Playgroud)
但它不起作用.
如果我正在尝试这个,一切都很好:
def domain = DomainName
def ids = 1
DomainName.find("from ${domain} as m where m.job = ${ids} ").id
Run Code Online (Sandbox Code Playgroud)
如何在find中使用动态域名类?
最简单的方法是使用该getDomainClass方法:
String domainClassName = 'com.foo.bar.Person'
def ids = 1
def domainClass = grailsApplication.getDomainClass(domainClassName).clazz
domainClass.find("from $domainClassName as m where m.job = ${ids} ").id
Run Code Online (Sandbox Code Playgroud)
请注意,如果您尝试按ID获取单个实例,请使用get:
long id = 1234
def person = domainClass.get(id)
Run Code Online (Sandbox Code Playgroud)
如果你想获得多个实例并且你有一个id列表,你可以使用getAll
def ids = [1,2,3,4,5]
def people = domainClass.getAll(ids)
Run Code Online (Sandbox Code Playgroud)
此外,它是一个真正坏主意,使用与属性值嵌入GString的-谷歌"SQL注入"
例如,通过用户名查找人员:
String username = 'foo'
def person = domainClass.find(
"from $domainClassName as m where m.username=:username",
[username: username])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3595 次 |
| 最近记录: |