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);
            }
        }
    }

总结

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

相关文章

  • springboot集成shiro遭遇自定义filter异常的解决

    springboot集成shiro遭遇自定义filter异常的解决

    这篇文章主要介绍了springboot集成shiro遭遇自定义filter异常的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11
  • gateway网关与前端请求跨域问题的解决方案

    gateway网关与前端请求跨域问题的解决方案

    这篇文章主要介绍了gateway网关与前端请求跨域问题的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • Java多线程之同步工具类Exchanger

    Java多线程之同步工具类Exchanger

    这篇文章主要介绍了Java多线程之同步工具类Exchanger,Exchanger 是一个用于线程间协作的工具类,Exchanger用于进行线程间的数据交换,它提供一个同步点,在这个同步点,两个线程可以交换彼此的数据,下面来看看具体内容吧
    2021-10-10
  • java创建线程池的7种实现方法

    java创建线程池的7种实现方法

    在Java中线程池是一种管理线程的机制,它可以创建一组线程并重复使用它们,避免了创建和销毁线程的开销,这篇文章主要给大家介绍了关于java创建线程池的7种实现方法,需要的朋友可以参考下
    2023-10-10
  • 浅谈SpringMVC HandlerInterceptor诡异问题排查

    浅谈SpringMVC HandlerInterceptor诡异问题排查

    这篇文章主要介绍了浅谈SpringMVC HandlerInterceptor诡异问题排查,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-05-05
  • java创建二维码并赋予url链接的功能实现

    java创建二维码并赋予url链接的功能实现

    这篇文章给大家分享java创建二维码并赋予url链接的功能实现,需要获取要赋值给二维码的链接后缀,通过设置二维码的访问路径等一系列操作,具体实现代码跟随小编一起看看吧
    2021-06-06
  • springboot IDEA启动两个端口服务nginx负载过程

    springboot IDEA启动两个端口服务nginx负载过程

    这篇文章主要介绍了springboot IDEA启动两个端口服务nginx负载过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-03-03
  • ThreadLocal常用方法、使用场景及注意事项说明

    ThreadLocal常用方法、使用场景及注意事项说明

    这篇文章主要介绍了ThreadLocal常用方法、使用场景及注意事项说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-10-10
  • SpringCloud中使用Sentinel实现限流的实战

    SpringCloud中使用Sentinel实现限流的实战

    限流在很多地方都可以使用的到,本篇博客将介绍如何使用SpringCloud中使用Sentinel实现限流,从而达到服务降级的目的,感兴趣的可以了解一下
    2022-01-01
  • 最全面的JVM优化经验总结

    最全面的JVM优化经验总结

    这篇文章主要介绍了最全面的JVM优化经验总结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,,需要的朋友可以参考下
    2019-06-06

最新评论