树形数据:oracle循环遍历获取子节点,java程序循环遍历获取子节点

10 篇文章 0 订阅

1.树形数据删除时候,需要删除子节点,当使用oracle数据库可以用oracle数据库自带函数获取子节点

通过子节点向根节点追朔.

select * from persons.dept start with deptid=76 connect by prior paredeptid=deptid

通过根节点遍历子节点(不包含根节点).

select * from persons.dept start with paredeptid=0 connect by prior deptid=paredeptid

通过根节点遍历子节点(包含根节点).

select * from persons.dept start with deptid=0 connect by prior deptid=paredeptid

2.直接使用程序获取子节点

IndexCatalogueEntity是树形结构体

@TableName("INDEX_CATALOGUE")
@Data
public class IndexCatalogueEntity implements Serializable {
	private static final long serialVersionUID = 1L;

		/**
	 * id主键
	 */
	@ApiModelProperty(value = "id主键")
	@TableId
	@TreeId
	private String id;
		/**
	 * 父id
	 */
	@ApiModelProperty(value = "父id")
	@NotEmpty(message = "父id不能为空!")
	@TreeParent
	private String pid;
		/**
	 * 目录编码
	 */
	@ApiModelProperty(value = "目录编码")
	@NotEmpty(message = "目录编码不能为空!")
	private String catalogueCode;
		/**
	 * 目录名称
	 */
	@ApiModelProperty(value = "目录名称")
	@NotEmpty(message = "目录名称不能为空!")
	private String catalogueName;
		/**
	 * 1 表示横向栏目,2表示子文件夹,3表示具体表单
	 */
	@ApiModelProperty(value = "目录类型 :1 表示横向栏目,2表示子文件夹,3表示具体表单")
	@NotNull(message = "目录类型不能为空!")
	private Integer catalogueType;
		/**
	 * 创建者
	 */
	@ApiModelProperty(value = "创建者")
	private String createBy;
		/**
	 * 创建时间
	 */
	@ApiModelProperty(value = "创建时间")
	private LocalDateTime createTime;
		/**
	 * 修改者
	 */
	@ApiModelProperty(value = "修改者")
	private String updateBy;
		/**
	 * 修改时间
	 */
	@ApiModelProperty(value = "修改时间")
	private LocalDateTime updateTime;
		/**
	 * 备注
	 */
	@ApiModelProperty(value = "备注")
	private String remarks;


	@TreeSub
	@TableField(exist = false)
	private List<IndexCatalogueEntity> indexCatalogueEntityList;
}

首先获取整个树形结构

List<IndexCatalogueEntity> indexCatalogueTreeList = treeUtil.toTree(indexCatalogueEntities);

然后找出id对应的开始树

IndexCatalogueEntity startEntity = getStartEntity(indexCatalogueTreeList, id);
  private  IndexCatalogueEntity  getStartEntity(List<IndexCatalogueEntity> list,String id) {
        for (IndexCatalogueEntity one:list){
            if(!one.getId().equals(id)){
                if(!CollectionUtils.isEmpty(one.getIndexCatalogueEntityList())){
                    IndexCatalogueEntity indexCatalogueEntity = getStartEntity(one.getIndexCatalogueEntityList(), id);
                    return indexCatalogueEntity;
                }else{
                    continue;
                }
            }else{
                return one;
            }
        }
        return null;
    }

封装idlist

commonMeth(startEntity.getIndexCatalogueEntityList(),idlist);
    private  void commonMeth(List<IndexCatalogueEntity> list, List<String> idlist) {
        for (IndexCatalogueEntity one:list){
            if(!CollectionUtils.isEmpty(one.getIndexCatalogueEntityList())){
                List<String> ids = new ArrayList<>();
                idlist.add(one.getId());
                commonMeth(one.getIndexCatalogueEntityList(),ids);
                idlist.addAll(ids);
            }else{
                idlist.add(one.getId());
            }
        }
    }

 

整个方法如下

       // 程序遍历方式删除,先查询是否有子节点
        List<IndexCatalogueEntity> indexCatalogueEntities = this.baseMapper.selectList(Wrappers.<IndexCatalogueEntity>query().lambda());
        try {
            List<IndexCatalogueEntity> indexCatalogueTreeList = treeUtil.toTree(indexCatalogueEntities);
            // 找出id对应的树getStartEntity
            IndexCatalogueEntity startEntity = getStartEntity(indexCatalogueTreeList, id);
            if(startEntity != null && !(CollectionUtils.isEmpty(startEntity.getIndexCatalogueEntityList()))){
                List<String> idlist = new ArrayList<>();
                idlist.add(startEntity.getId());
                commonMeth(startEntity.getIndexCatalogueEntityList(),idlist);
                this.baseMapper.deleteBatchIds(idlist);
                log.info("删除的数据为:"+gson.toJson(idlist));
            }else{
                this.baseMapper.deleteById(id);
                log.info("删除的数据id为:"+id);
            }
        }catch (Exception e){
            e.printStackTrace();
            throw new IndexException(ExceptionEnum.DELETE_ENTITYS_ERROR);
        }

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值