java如何实现递归删除树形数据的任一个节点

 更新时间:2024年12月17日 08:51:06   作者:朱衣点头戈子衫  
文章讲述了在Java中实现递归删除树形数据的任一个节点时需要注意的三个点,包括删除的节点包含子节点、删除子节点和其他子节点删除的节点不包含子节点、以及该父节点变成叶子节点,此外,文章还提到这两件事包含在同一件事务中

java实现递归删除树形数据的任一个节点

需要注意3个点

  1. 删除的节点包含子节点,删除子节点和其他子节点
  2. 删除的节点不包含子节点,该父节点变成叶子节点
  3. 另外这两件事包含在同一件事务中,具有原子性

实现方法

  1. 递归遍历节点和其子节点
  2. 具有原子性,创建一个方法,开启事务,

事务的一般手动开启方法

Connection connection = JDBCUtil_C3P0.getConnection();

try {
//关闭事务自动提交(开启事务)
connection.setAutoCommit(false);
//...你的操作
//以上全部操做无异常则提交事务
connection.commit();
} catch (SQLException e) {
	//一旦事务中有哪一步操做发生异常则进行事务回滚
	connection.rollback();
	e.printStackTrace();
}finally{
	//关闭链接资源
	//...
}

后端使用递归删除树形结构的所有子节点

controller

    /**
     * 根据id删除树节点
     *
     * @param id 待删除节点的id
     * @return true/false
     */
    @RequestMapping("/deleteTreeNodeById")
    public ResponseData<Boolean> deleteTreeNodeById(@RequestParam(name = "id") String id) {
        return successWithData(configDictService.deleteTreeNodeById(id));
    }

service接口

boolean deleteTreeNodeById(String id);

service接口实现类

    @Override
    public boolean deleteTreeNodeById(String id) {
        List<String> deleteIdList = new LinkedList<>();
        deleteIdList.add(id);
        getAllChildrenIdList(id, deleteIdList);
        return baseMapper.deleteBatchIds(deleteIdList) == 1;
    }

    /**
     * 递归查询当前节点下所有孩子节点id列表
     *
     * @param id
     * @param deleteIdList
     */
    private void getAllChildrenIdList(String id, List<String> deleteIdList) {
        QueryWrapper<ConfigDict> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq(ConfigDict.PARENT_ID, id);
        List<ConfigDict> childrenList = baseMapper.selectList(queryWrapper);
        if (CollectionUtil.isNotEmpty(childrenList)) {
            for (ConfigDict children : childrenList) {
                deleteIdList.add(children.getId());
                getAllChildrenIdList(children.getId(), deleteIdList);
            }
        }
    }

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 深入理解Java基础中的集合框架

    深入理解Java基础中的集合框架

    Java集合框架(Java Collections Framework, JCF)也称容器,这里可以类比 C++中的 STL,在这里主要对如下部分进行源码分析,及在面试中常见的问题,例如,在阿里面试常问到的 HashMap和ConcurrentHashMap原理等等,深入源码分析是面试中必备的技能
    2023-08-08
  • Java删除文件夹常见的操作方法

    Java删除文件夹常见的操作方法

    在Java编程中删除文件或文件夹是一项常见的操作,下面这篇文章主要介绍了Java删除文件夹常见的操作方法,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-06-06
  • Java中的适配器模式详解

    Java中的适配器模式详解

    这篇文章主要介绍了Java中的适配器模式详解,适配器模式(Adapter Pattern)将某个类的接口转换成客户端期望的另一个接口表示,主的目的是兼容性,让原本因接口不匹配不能一起工作的两个类可以协同工作,需要的朋友可以参考下
    2023-09-09
  • 基于java使用钉钉机器人向钉钉群推送消息

    基于java使用钉钉机器人向钉钉群推送消息

    这篇文章主要介绍了基于java使用钉钉机器人向钉钉群推送消息,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • 带你入门Java的集合

    带你入门Java的集合

    Java的集合类型都是对java.util包中Collection接口的继承,这里我们主要介绍依赖于collection的一些主分支,一起来看一下Java中的collection集合类型总结
    2021-07-07
  • SpringBoot集成jjwt和使用方式

    SpringBoot集成jjwt和使用方式

    本文详细介绍了JWT依赖(以jjwt为例)的引入和使用方法,首先,需要在项目中引入jwt依赖,随后在Spring的启动类application.yml中进行相应配置,最后,提供了一份完整的jwt工具类代码,供读者直接使用,以上内容便是作者的个人经验分享,期望能为读者提供参考并得到支持
    2024-10-10
  • Mybatis参数传递示例代码

    Mybatis参数传递示例代码

    这篇文章主要给大家介绍了关于Mybatis参数传递的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-08-08
  • Java的Servlet及其生命周期详解

    Java的Servlet及其生命周期详解

    这篇文章主要介绍了Java的Servlet及其生命周期详解,Servlet是用Java编写的服务器端程序,一门用于开发动态web资源的技术,其主要功能在与交互式的浏览和修改数据,生成动态web内容,需要的朋友可以参考下
    2023-11-11
  • Java类初始化和实例化中的2个“雷区”

    Java类初始化和实例化中的2个“雷区”

    这篇文章主要介绍了Java类初始化和实例化中的2个“雷区”,大家要注意,感兴趣的小伙伴们可以参考一下
    2016-02-02
  • spring循环依赖策略解析

    spring循环依赖策略解析

    这篇文章主要为大家详细介绍了spring循环依赖策略,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-09-09

最新评论