成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

詳解Hibernate樹(shù)形結(jié)構(gòu)

開(kāi)發(fā) 后端
這里介紹在系統(tǒng)中,經(jīng)常會(huì)用到無(wú)限級(jí)的Hibernate樹(shù)形結(jié)構(gòu)分類(lèi),如組織機(jī)構(gòu)管理、商品/地區(qū)分類(lèi)等等。一般無(wú)外采用兩種方式。

本文向大家介紹Hibernate樹(shù)形結(jié)構(gòu),可能好多人還不了解Hibernate樹(shù)形結(jié)構(gòu),沒(méi)有關(guān)系,看完本文你肯定有不少收獲,希望本文能教會(huì)你更多東西。

在系統(tǒng)中,經(jīng)常會(huì)用到無(wú)限級(jí)的Hibernate樹(shù)形結(jié)構(gòu)分類(lèi),如組織機(jī)構(gòu)管理、商品/地區(qū)分類(lèi)等等。一般無(wú)外采用兩種方式:
◆一是類(lèi)似struts-menu的XML文件管理方式,配置起來(lái)比較方便,但很難與系統(tǒng)中其它應(yīng)用數(shù)據(jù)集成;
◆二是使用數(shù)據(jù)庫(kù)存儲(chǔ),定義父子關(guān)系。

在我們現(xiàn)在開(kāi)發(fā)的一個(gè)產(chǎn)品中,實(shí)現(xiàn)了一套Hibernate樹(shù)形結(jié)構(gòu)的處理方法,簡(jiǎn)介如下:

一.Hibernate樹(shù)形結(jié)構(gòu)顯示

使用的是xtree。為便于編輯維護(hù),自己寫(xiě)了一個(gè)左鍵彈出菜單(xtree的右鍵事件無(wú)法更改),進(jìn)行節(jié)點(diǎn)的添加、修改、刪除、轉(zhuǎn)移操作。(PS:這套維護(hù)界面是完全跨瀏覽器的,有興趣的不妨一試)

二.關(guān)聯(lián)關(guān)系:

可以使用objects對(duì)象來(lái)配置關(guān)聯(lián)關(guān)系,實(shí)現(xiàn)多對(duì)多/一對(duì)多等關(guān)系。在BaseTree中,getObjects()方法是abstract的,可以根據(jù)需要自己定義。如論壇分類(lèi)與每個(gè)分類(lèi)所對(duì)應(yīng)的貼子相關(guān)聯(lián),商品分類(lèi)與商品編碼相關(guān)聯(lián)等,可以根據(jù)需要來(lái)處理hbm文件。若需要多項(xiàng)關(guān)聯(lián),亦可擴(kuò)展。如菜單與用戶、部門(mén)、崗位分別進(jìn)行關(guān)聯(lián)

三.主要代碼:

  1. package test.testtree.base;  
  2. import java.util.*;  
  3.  
  4. public abstract class BaseTree extends BasePojo implements Tree{   
  5. protected String code;   
  6. protected String name;   
  7. protected String description;  
  8. protected BaseTree parent;  
  9. protected Set children = new HashSet();   
  10. protected Set objects = new HashSet();   
  11. public void setCode(String code) {  
  12. this.code = code;  
  13. }   
  14. abstract public String getCode();  
  15. public void setName(String name) {  
  16. this.name = name;  
  17. }   
  18. abstract public String getName();   
  19. public void setDescription(String description) {  
  20. this.description = description;  
  21. }  
  22. abstract public String getDescription();  
  23. abstract public Tree getParent();  
  24. public boolean isRoot() {  
  25. return (getParent()==null);  
  26. }   
  27. public boolean isLeaf() {  
  28. return (this.getChildren().size()==0);  
  29. }   
  30. public boolean isParentOf(Tree tree) {  
  31. if (tree==null || ((BaseTree) tree).equals(this)) {  
  32. /*如果對(duì)方為空*/  
  33. return false;  
  34. }else if(this.isLeaf()){  
  35. /*如果自己為葉子,則返回FALSE*/  
  36. return false;  
  37. }else if(tree.isRoot()){  
  38. /*如果對(duì)方為根,返回FALSE*/  
  39. return false;  
  40. }else{  
  41. BaseTree bt = (BaseTree) (tree.getParent());  
  42. if (this.equals(bt)){  
  43. /*如果對(duì)方的父節(jié)點(diǎn)是自己,則返回TRUE*/  
  44. return true;  
  45. }else{  
  46. /*判斷對(duì)方的父節(jié)點(diǎn)是否是自己的孩子,進(jìn)行遞歸*/  
  47. return isParentOf(bt);  
  48. }  
  49. }  
  50. }  
  51. public boolean isChildOf(Tree tree) {  
  52. return (tree.isParentOf(this));  
  53. }  
  54. public void addChild(Tree tree) {  
  55. children.add(tree);  
  56. }  
  57. public void rmChild(Tree tree) {  
  58. children.remove(tree);  
  59. ((BaseTree) tree).setParent(null);  
  60. }  
  61. public Set getAllLeaves() {  
  62. Set set_old = this.getAllChildren();  
  63. Set set = new HashSet();  
  64. set.addAll(set_old);  
  65. Iterator itr = set_old.iterator();  
  66. while(itr.hasNext()){  
  67. BaseTree bt = (BaseTree) itr.next();  
  68. if (! bt.isLeaf()){  
  69. set.remove(bt);  
  70. }  
  71. }  
  72. return set;  
  73. }  
  74. public Set getAllChildren() {  
  75. Set set = new HashSet();  
  76. Stack stack = new Stack();  
  77. stack.push(this);  
  78. while(!stack.empty()){  
  79. BaseTree bt = (BaseTree) stack.pop();  
  80. set.add(bt);  
  81. Iterator itr = bt.getChildren().iterator();  
  82. while(itr.hasNext()){  
  83. BaseTree btchild = (BaseTree) itr.next();  
  84. stack.push(btchild);  
  85. }  
  86. }  
  87. set.remove(this);  
  88. return set;  
  89. }  
  90. public List getMeAndListAllChildren() {  
  91. List lst = new Vector();  
  92. lst.add(this);  
  93. Iterator itr = this.getChildren().iterator();  
  94. while(itr.hasNext()){  
  95. BaseTree bt = (BaseTree) itr.next();  
  96. lst.addAll(bt.getMeAndListAllChildren());  
  97. }  
  98. return lst;  
  99. }  
  100. abstract public Set getChildren();  
  101. public void addObject(Object obj) {  
  102. objects.add(obj);  
  103. }  
  104. public void rmObject(Object obj) {  
  105. objects.remove(obj);  
  106. }  
  107. abstract public Set getObjects();  
  108. public void setParent(Tree parent) {  
  109. this.parent = (BaseTree) parent;  
  110. }  
  111. public void setChildren(Set children) {  
  112. this.children = children;  
  113. }  
  114. public void setObjects(Set objects) {  
  115. this.objects = objects;  
  116. }  

【編輯推薦】

  1. 描述Hibernate持久性類(lèi)
  2. 分析Java應(yīng)用程序和Hibernate
  3. Hibernate3和JBOSS 3.2強(qiáng)強(qiáng)聯(lián)手
  4. 詳解Hibernate.properties文件
  5. 淺談定制Hibernate映射
責(zé)任編輯:佚名 來(lái)源: IT168
相關(guān)推薦

2009-06-03 09:11:03

Hibernate工作原理體系結(jié)構(gòu)

2009-09-21 17:33:50

Hibernate基礎(chǔ)

2009-09-24 17:24:20

Hibernate S

2009-06-02 14:46:26

Hibernate關(guān)系映射教程

2009-09-24 15:53:00

Hibernate J

2009-09-23 16:30:01

Hibernate f

2009-09-24 13:03:38

Hibernate C

2009-09-22 17:25:41

優(yōu)化Hibernate

2024-09-19 08:22:41

2009-09-27 10:28:12

Hibernate.p

2009-07-09 16:01:27

2009-09-25 10:38:42

Hibernate動(dòng)態(tài)

2009-09-23 12:48:54

Hibernate I

2012-02-14 15:51:13

JavaHibernate

2009-07-28 13:48:28

ASP.NET樹(shù)形圖

2017-02-08 14:16:17

C代碼終端

2010-05-24 19:17:12

SNMP對(duì)象

2011-04-07 11:06:18

Hibernate

2015-04-27 09:50:45

Java Hibern連接池詳解

2011-03-08 11:13:52

proftpd結(jié)構(gòu)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 国产精品国产成人国产三级 | 国产激情视频网址 | 请别相信他免费喜剧电影在线观看 | 亚洲久久久 | 国产在线观看一区二区三区 | 午夜免费网站 | 三级高清 | 国产精品自拍av | 色综合久久久 | 精品视频国产 | 欧美电影一区 | 亚洲精品一区二区 | 2019天天操 | 久久久999精品 | 亚洲情侣视频 | 午夜激情影院 | 欧美日韩综合精品 | 国产伦精品一区二区三区四区视频 | 天天操欧美 | 日韩欧美国产一区二区 | 亚洲综合大片69999 | av黄色免费在线观看 | 午夜精品一区二区三区在线播放 | 国产精品视频一二三区 | 精品国产一区二区国模嫣然 | 台湾av在线 | 亚洲福利在线观看 | 国产精品久久久久久久久久久免费看 | 国产91视频一区二区 | 亚洲精品4 | 久久成 | 中国av在线免费观看 | 久久久福利 | 精品免费视频一区二区 | 亚洲一区二区三区在线视频 | 亚洲欧美在线免费观看 | 欧美福利视频一区 | 国产精品久久九九 | 日韩视频精品 | 亚洲国产看片 | 精品久久久久久久人人人人传媒 |