递归查询树形数据

后端业务层四层嵌套循环

查询所有数据后进入循环2,循环所有子数据

@Override
public List<CarTypeEntity> getCarTypeList() {//获取车类型list
    CarTypeEntity carTypeEntity = new CarTypeEntity();
    List<CarTypeEntity> carTypes = carTypeMapper.selectAll();//查询到数据库中所有数据
    for (CarTypeEntity carType : carTypes) {//forEach增强for循环
        if (carType.getParentId()==0){//判断是否最顶层类型
            findChildren(carType,carTypes);//调用方法查找子类型
        }
    }
    for (int i = carTypes.size()-1;i>0;i--){//循环所有的数据
        if (carTypes.get(i).getParentId()!=0){//当获取到的不是顶层时
            carTypes.remove(i);//因为已经在上方法把顶层的子类筛选出来,所以把不是顶层的删除
        }
    }
    return carTypes;
}

查询子数据Children数组

private static void findChildren(CarTypeEntity carType, List<CarTypeEntity> carTypes) {
    if (carType.getChildren()==null){//当首次运行时
        carType.setChildren(new ArrayList<>());//给children赋ArrayList类型
    }
    for (CarTypeEntity type : carTypes) {//循环车类型集合查找当前类型子类型
        if (type.getParentId().equals(carType.getId())&&type.getDeleteFlag()==0){//如果有类的parentId为当前类的Id时
            List<CarTypeEntity> chiledren = carType.getChildren();//先获取当前类的children
            chiledren.add(type);//把子类放进当前类的children里
            carType.setChildren(chiledren);//然后set到当前类的children里
        }
    }
    if (carType.getChildren().size()!=0){//判断是否拥有子类型 如果有子类的话,找子类的子类
        List<CarTypeEntity> chiledren = carType.getChildren();//获取到当前类的所有children子类
        for (CarTypeEntity type : chiledren) {//循环子类型调用方法查找子类型的子类型
            findChildren(type,carTypes);//把当前children和所有数据放入方法进行筛选子类
        }
        carType.setChildren(chiledren);//把找到的子类放到当前子类里,实现加入子类的子类
    }
}

Controller层返回发送JSON数据就可以接受

    @GetMapping("listCarType")
    public CommonResult lisCarType2(CarTypeEntity carTypeEntity){
        List<CarTypeEntity> carTypeEntities = carTypeService.getCarTypeList();
        return CommonResult.ok(carTypeEntities);
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值