java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > java递归删除树形数据的任一个节点

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

作者:朱衣点头戈子衫

文章讲述了在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);
            }
        }
    }

总结

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

您可能感兴趣的文章:
阅读全文