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计算两个时间相差天数的方法,感兴趣的小伙伴们可以参考一下
    2015-11-11
  • SpringBoot中的HATEOAS详情

    SpringBoot中的HATEOAS详情

    这篇文章主要介绍了SpringBoot中的HATEOAS详情,SpringBoot提供了HATEOAS的便捷使用方式,文章围绕主题展开详细介绍内容,需要的小伙伴可以参考一下
    2022-05-05
  • 有关Java常见的误解小结(来看一看)

    有关Java常见的误解小结(来看一看)

    下面小编就为大家带来一篇有关Java常见的误解小结(来看一看)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • mybatis-plus 版本不兼容问题的解决

    mybatis-plus 版本不兼容问题的解决

    这篇文章主要介绍了mybatis-plus 版本不兼容问题的解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • RPC框架之Thrift的入门教程

    RPC框架之Thrift的入门教程

    Thrift是一个跨语言的服务部署框架,主要用于各个服务之间的RPC通信,支持跨语言,下面小编就来和大家讲讲Thrift框架的具体使用,希望对大家有所帮助
    2023-10-10
  • Java SimpleDateFormat与System类使用示例详解

    Java SimpleDateFormat与System类使用示例详解

    这篇文章主要介绍了Java SimpleDateFormat与System类使用示例,对于SimpleDateFormat类,是一个用来区分区域设置的方式进行日期的是指,以及对日期进行处理分析的一个实现类
    2022-11-11
  • springcloud+nacos实现灰度发布示例详解

    springcloud+nacos实现灰度发布示例详解

    这篇文章主要介绍了springcloud+nacos实现灰度发布,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-08-08
  • Java synchronized同步关键字工作原理

    Java synchronized同步关键字工作原理

    synchronized作为Java程序员最常用同步工具,很多人却对它的用法和实现原理一知半解,以至于还有不少人认为synchronized是重量级锁,性能较差,尽量少用。但不可否认的是synchronized依然是并发首选工具,本文就来详细讲讲
    2023-02-02
  • 详解MyBatis Plus中分页插件的使用

    详解MyBatis Plus中分页插件的使用

    这篇文章主要为大家详细介绍了MyBatis Plus中分页插件使用的相关知识,文中的示例代码讲解详细,具有一定的学习价值,感兴趣的小伙伴可以了解一下
    2023-02-02
  • springboot整合mybatis中的问题及出现的一些问题小结

    springboot整合mybatis中的问题及出现的一些问题小结

    这篇文章主要介绍了springboot整合mybatis中的问题及出现的一些问题小结,本文给出了解决方案,需要的朋友可以参考下
    2018-11-11

最新评论