jquery教程http://www.software8.co/wzjs/jquery/
近来几日,在学习hibernate,在做练习的时候,想做一个树形结构出来,比如组织架构,于是开始动手去尝试,首先是利用hibernate自己的方式做一棵树,于是开始动手构建persisten object,代码如下:
然后利用代码声生成结构,但是这样一来,生成的表中,parent_id是强制关联自己表的主键的,感觉这样不是很灵活,于是就想着,把外键约束去掉,转而在程序里控制好,这样灵活性提高了。想想在工作中遇到的树形结构的表设计中,也没有加入外键约束,所以我就开始构建一个没有外键约束的树形结构。
经过思考,我决定使用如下的方式实现:抽象出一个BaseTree来,里面有主键,父亲节点的ID,父亲节点的对象和儿子节点的集合,这基本上是所有树形结构都共有的特性,所以抽象出来,让其他的树去继承,然后让程序员更加关注本树的业务字段。抽象出来的BaseTree代码如下:
然后再创建一棵树,让他继承BaseTree,但是需要重写主键和父节点ID这两个属性,因为需要把他们映射到数据库里面去,代码如下:
这样,模型就出来了,创建出来的表结构如下图:完全没有了外键约束符合要求:
虽然是模型和表都整出来了,但是有一个问题,当我们把所有的树节点都查询出来的时候,他们自身只有一个父节点的ID,想访问他的父节点或者是孩子节点,需要拿着该节点的主键查孩子节点或者拿着patentId查父亲节点,很是麻烦,于是就想着整一个工具类,把全查出来的节点的父亲和儿子都匹配上,目前只是完成了全部节点的匹配,以后还会完成某一个节点的匹配。建了一个工具类,代码如下:
这样就是把查出来的节点做循环,先是给每个节点的找到父亲节点,然后在给每个节点去找儿子节点。
附上一段测试代码(片段):
不好意思,忘记附上表的数据了,补上:
最后测试的结果如下:
到此,基本的功能都已经实现了,剩下需要做的有如下几个:
1、晚上BaseTreeUtil的功能
2、把以上内容应用到DAO层的编写中,整合到spring进行测试
后续工作的总结写在下次日志中。原文链接:http://www.software8.co/wzjs/java/3335.html
posted on 2013-03-13 17:33 你爸是李刚 阅读(1920) 评论(0) 编辑 收藏
Powered by: BlogJava Copyright © 你爸是李刚