之前在项目需要实现一个功能——将xml文件映射成实体,然后对映射的实体进行逻辑处理,最后保存到数据库中;由于xml结构的数据是结构化的数据,所以需要保证保存的数据具有正确的主外键关联。如下所示,是一个需要保存到数据库的xml文件。当映射成对应的实体school和student的时候,我们需要知道“school-one”下面有哪些学生,“school-two”下面有哪些学生,这个时候想到了使用树形结构来保存实体,让实体之间依然存在关联关系。
1 | <school-inf> |
树形工具
以下是树形工具类的实现,包含了树形节点类和树形结构类,由于代码中注释已经比较全面,所以不做过多的说明。
树形节点类BeanTreeNode.java
每一个节点对应一个实体,节点包含了实体信息,为了保证实体之间的关联关系,需要留有父节点信息,所有的子节点信息。由此推断出,节点的主要成员有
- 父节点信息
- 所有子节点信息
- 当前实体信息
为了方便操作,我还多增加了id和pid(parent id),以及节点类型(nodeType)。对id的相关操作我并没有添加,如果需要可以自行添加。
1 | import java.util.ArrayList; |
树形结构类BeanTree.java
BeanTree.java里面包含了如下的一些常用操作:
- 返回根节点
- 返回最后添加节点
- 判断是否具有子节点
- 添加节点
- 移动节点到其他节点下
- 获取对应nodeType的所有节点或实体
- 根据实体获取节点
- 获取父节点
- 转化为map结构
代码如下
1 | import java.util.ArrayList; |
测试树形工具
使用上面的xml进行测试,这里就不再做xml映射,假设存在上面xml所示的所有实体,“school-one”和“school-two”以及5个student,看看能否构造出想要的结构,测试类代码如下。
1 | class SchoolInf { |
我们通过调试观察树结构变量“tree”的值如下:
可以看出来能够构造出正确的结构,BeanTree中其他的一些方法这里就不在一一测试了。
更新记录
- 2018/1/10,在BeanTree中添加更多的操作方法。