Đin*_*hâu 1 dns grails dynamic
你能告诉我如何在Grails域类上进行投影吗?!在我的情况下,我想通过他们的ID得到(例如)用户名的列表.这意味着在我的方法中,我传递一个userId列表并获取用户名的列表.Groovy域的动态方法是否支持此功能?目前,我正在使用我的以下功能:
public String getUserNamesByIds(String[] ids) {
StringBuffer names = User.get(Integer.parseInt(ids[0]).getName())
if(ids.length > 1) {
(1..ids.length - 1).each{
names.append(", " + User.get(Integer.parseInt(ids[it])).getName())
}
}
return names.toString()
}
Run Code Online (Sandbox Code Playgroud)
如您所见,我只想获取名称(并构建总字符串).我认为这不好,因为我必须做很多小步骤,并对数据库执行许多查询以获取User对象.有没有更好的方法来做到这一点?非常感谢!
您可以使用条件和投影来获取给定其ID的用户的名称,执行以下操作:
public List getUserNamesByIds(String[] ids) {
def criteria = User.createCriteria()
return criteria.list {
projections {
property("name")
}
'in'("id", ids)
}
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以通过执行以下操作将用户名列表转换为字符串:
List users = getUserNamesByIds(...)
String concatenatedNames = (users ? users.join(",") : "")
Run Code Online (Sandbox Code Playgroud)
您可以在Grails用户指南中阅读有关标准和投影的更多信息.