使用树形结构保存实体

本文介绍了如何使用树形结构保存从XML映射得到的实体,以保持它们的关联关系。详细讲解了树形节点类BeanTreeNode和树形结构类BeanTree的实现,包括节点的属性和操作方法。通过测试案例展示了如何构造并验证正确的树形结构。
摘要由CSDN通过智能技术生成

4651321-2f5eac27cb0f0107.png
tree

阅读原文请访问我的博客 BrightLoong's Blog

之前在项目需要实现一个功能——将xml文件映射成实体,然后对映射的实体进行逻辑处理,最后保存到数据库中;由于xml结构的数据是结构化的数据,所以需要保证保存的数据具有正确的主外键关联。如下所示,是一个需要保存到数据库的xml文件。当映射成对应的实体school和student的时候,我们需要知道“school-one”下面有哪些学生,“school-two”下面有哪些学生,这个时候想到了使用树形结构来保存实体,让实体之间依然存在关联关系。

<school-inf>
  <msg>2017-10-1XX省学校信息总汇</msg>
  <schools>
    <school>
      <name>school-one</name>
      <students>
        <student>Jack</student>
        <student>Rose</student>
        <student>Jon</student>
      </students>
    </school>
    <school>
      <name>school-two</name>
      <students>
        <student>Bob</student>
        <student>Alisa</student>
        </students>
      </school>
    </schools>
</school-inf>

树形工具

以下是树形工具类的实现,包含了树形节点类和树形结构类,由于代码中注释已经比较全面,所以不做过多的说明。

树形节点类BeanTreeNode.java

每一个节点对应一个实体,节点包含了实体信息,为了保证实体之间的关联关系,需要留有父节点信息,所有的子节点信息。由此推断出,节点的主要成员有

  • 父节点信息
  • 所有子节点信息
  • 当前实体信息

为了方便操作,我还多增加了id和pid(parent id),以及节点类型(nodeType)。对id的相关操作我并没有添加,如果需要可以自行添加。

import java.util.ArrayList;
import java.util.List;
import java.util.UUID;

/**
 * 实体树形结构点
 * BeanTreeNode
 * @author BrightLoong
 * @version 1.0
 *
 */
public class BeanTreeNode {
    
    /**标识id*/
    private String id;
    
    /**父id标识,为了方便获取冗余出来*/
    private String pid;
    
    /**父节点*/
    private BeanTreeNode parentNode;
    
    /**节点类型*/
    private String nodeType;
    
    /**节点值*/
    private Object bean;
    
    /**子节点*/
    private List<BeanTreeNode> childNodes;
    

    /**
     * @param parentNode
     * @param nodeType
     * @param bean
     * @param childNodes
     */
    public BeanTreeNode(BeanTreeNode parentNode, String nodeType, Object bean) {
        this.parentNode = parentNode;
        this.nodeType = nodeType;
        this.bean = bean;
        this.childNodes = new ArrayList<BeanTreeNode>();
        this.id = UUID.randomUUID().toString().replaceAll("-", "");
        if (parentNode != null) {
            this.pid = parentNode.getId();
        }
    }

    /**
     * @return the nodeType
     */
    public String getNo
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值