完美例子,复制即用,无限极联动
最近写了一个四级联动,现在分享下代码,其实是可以无限极联动,只要数据够多
返回格式
"data": [
{
"id": 1,
"name": "爷爷",
"le": 1,
"fid": 0,
"childs": [
{
"id": 2,
"name": "大叔",
"le": 2,
"fid": 1,
"childs": []
},
{
"id": 3,
"name": "爸爸",
"le": 2,
"fid": 1,
"childs": [
{
"id": 4,
"name": "儿子",
"le": 3,
"fid": 3,
"childs": [
{
"id": 5,
"name": "小小",
"le": 4,
"fid": 4,
"childs": []
}
]
}
]
}
]
}
]
}
表,自连接
代码
在实体类里面需要多加一个 List childs; 集合的字段
//定义方法,返回值根据自己的来我的是Result
public Result lian(){
//查询某一级的id 作为父id进行下面子集查询
//sql select * from lian where id=1 这里就写死了
List<Lian> list = userMapper.lian1111();
//循环查询 子集
for (Lian item:list){
//调用封装的方法,给父id 和 等级
item.setChilds(xx(item.getId(),1));
}
//最后全部查完 返回打印
return Result.ok("data",list);
}
public List<Lian> xx(int fid,int le){
List<Lian> list = new ArrayList<>();
//如果 等级等于5 就结束调用 可以自己修改结束条件
if(le == 5){
System.out.println("结束了");
return null;
}
//根据父id查询出自己
//sql select * from lian where fid=#{fid}
List<Lian> list1 = userMapper.lian(fid);
//等级 +1
le = le+1;
// 从上面父id查出来的子集,成为父级继续查子集
for (Lian item:list1) {
//递归调用
item.setChilds(xx(item.getId(),le));
}
list.addAll(list1);
return list;
}