java如何实现递归删除树形数据的任一个节点
更新时间:2024年12月17日 08:51:06 作者:朱衣点头戈子衫
文章讲述了在Java中实现递归删除树形数据的任一个节点时需要注意的三个点,包括删除的节点包含子节点、删除子节点和其他子节点删除的节点不包含子节点、以及该父节点变成叶子节点,此外,文章还提到这两件事包含在同一件事务中
java实现递归删除树形数据的任一个节点
需要注意3个点
- 删除的节点包含子节点,删除子节点和其他子节点
- 删除的节点不包含子节点,该父节点变成叶子节点
- 另外这两件事包含在同一件事务中,具有原子性
实现方法
- 递归遍历节点和其子节点
- 具有原子性,创建一个方法,开启事务,
事务的一般手动开启方法
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 SimpleDateFormat与System类使用示例详解
这篇文章主要介绍了Java SimpleDateFormat与System类使用示例,对于SimpleDateFormat类,是一个用来区分区域设置的方式进行日期的是指,以及对日期进行处理分析的一个实现类2022-11-11springboot整合mybatis中的问题及出现的一些问题小结
这篇文章主要介绍了springboot整合mybatis中的问题及出现的一些问题小结,本文给出了解决方案,需要的朋友可以参考下2018-11-11
最新评论