zoukankan      html  css  js  c++  java
  • 树节点递归删除--service层

    @Service
    public class ContentCategoryServiceImpl extends BaseServiceImpl<ContentCategory> implements ContentCategoryService {
    
    
        @Override
        public void deleteContentCategory(Long parentId, Long id) {
            // 声明存放需要删除的节点的容器
            List<Object> ids = new ArrayList<>();
    
            // 把自己的id放到ids中
            ids.add(id);
    
            // 使用递归获取所有需要删除的节点的id
            this.getIds(id, ids);
    
            // 使用父类的方法,批量删除
            super.deleteByIds(ids);
    
            // 查询兄弟节点,声明查询条件
            ContentCategory param = new ContentCategory();
            param.setParentId(parentId);
    
            // 执行查询
            int count = super.queryCountByWhere(param);
    
            // 判断是否没有兄弟节点
            if (count == 0) {
                // 如果没有兄弟节点
                ContentCategory parent = new ContentCategory();
    
                parent.setId(parentId);
                // 修改父节点的isParent为false
                parent.setIsParent(false);
    
                // 执行修改
                super.updateByIdSelective(parent);
    
            }
            // 如果还有兄弟节点,神马都不做
        }
    
        // 使用递归的方式查询所有的子节点的id
        private void getIds(Long id, List<Object> ids) {
            // 根据条件查询当前节点的所有的子节点
            ContentCategory param = new ContentCategory();
            param.setParentId(id);
            List<ContentCategory> list = super.queryListByWhere(param);
    
            // 使用递归的方式,必须设置递归的停止条件,否则会一直自己调用自己,直到内存溢出
            // 判断是否还有子节点
            if (list.size() > 0) {
                // 如果有子节点,遍历结果集
                for (ContentCategory son : list) {
                    // 1.把子节点的id放到ids容器中
                    ids.add(son.getId());
                    // 2.执行递归,自己调用自己,查询子节点的子
                    this.getIds(son.getId(), ids);
                }
            }
        }
    
    
    
    
    
    
    
    }
  • 相关阅读:
    关于2021-01-13爆发的incaseformat病毒相关信息收集1.2(持续更新和关注中...)
    (转)服务器UDIMM、LRDIMM、RDIMM三种内存的区别
    Shred命令 学习
    关于图片文件的元数据信息清理和时间戳修改
    关于Chrome 浏览器 “小尾巴”问题的解决办法
    CF471D MUH and Cube Walls -kmp
    UVA12467 Secret Word -kmp
    UVA12604 Caesar Cipher -kmp
    【JLOI2007】周期串
    Http协议
  • 原文地址:https://www.cnblogs.com/javaxiaoxin/p/7594202.html
Copyright © 2011-2022 走看看