用一行代码就可以获取树状结构中某节点下的所有全部子节点!注意:这个树是无深度限制的。无深度限制这点很重要,如果有限深度的树,那我们也很容易通过层级编码用“Like 001%”方式实现(维护编码也是一个有挑战性活)。我们以一个非常常见的“类别”Domain为例,大类分小类,小类再细分,典型的树形结构,看看Grails是如何以简洁的语法表达的,体验Groovy语法的神奇!
class Group{
String name
static hasMany = [children:Group]
static belongsTo = [parent: Group]
static transients = ['allChildren']
def getAllChildren(){
children ? children + children*.allChildren.flatten() : []
}
}
1、挂钩关系
static hasMany = [children:Group]
static belongsTo = [parent: Group]
2、关键代码
children ? children + children*.allChildren.flatten() : []
注:
flatten(): assert [1, [2, 3]].flatten() == [1, 2, 3]