亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

hibernate繼承關系映射和java反射機制的運用

系統 1752 0

????????????????? hibernate繼承關系映射大概有5種,這5種繼承關系映射里面,我覺得最有效最常用的一種方式非常好.就說說這種吧.先來說說hibernate繼承關系什么時候使用.

???????????? (1)?hibernate繼承關系什么時候使用?

???????????? 很多例子都是說一個動物類,然后是老虎類啊,獅子類啊之類去繼承動物類.例子很好,但是實際應用中我根據這個提出了一個完全可行的解決方案,很有成就感!

???????????? 在項目里面,遇到這樣一個問題,大概有30多張表,里面都有共性的字段,每張表都需要走審核流程,如果針對每張表都做相應的審核模塊,代碼重復不說,那工作量就大了.針對這個就需要用到hibernate繼承關系映射了,所有共性的字段都提取出來,把審核模塊做成公共的模塊!這中間又涉及用到了java反射機制.

??????????? (2)開始例子

??????????? 先把30多張表共性的字段整理出來, id主鍵字段(String 類型的 主鍵生成方式是uuid),因為uuid按著計算,據說得300年才能出現重復的數據,300年以后我早就入古了,軟件維護找我,嘿嘿,連骨灰都沒嘍!得了,跑題了.......繼續!

????????? 共有的字段:

???????? id???? varchar?? 32

???????? fileName?? varchar? 100

??????? audState??? varchar? 2

??????? tableName? varchar? 50 (這個字段存表名,表1的名字table1,就存table1,表2的名字table2,就存table2......反射時候用)

????????? 上面是所有表中共有的字段.再拿30多張表中的一張table1表來舉例子吧.table1表里面自己特有的字段如下:

???????? isDel?? varchar? 2

??????? fileTypeId?? int????4

??????? code1?? varchar?? 50

??????? code2?? varchar? 50

??????? code3?? varchar? 50

?????????hibenrate繼承關系映射開始了

??????? 把共有的字段提出來做一個配置文件TcommTable.hbm.xml

????????

<? xml?version="1.0" ?>
<! DOCTYPE?hibernate-mapping?PUBLIC?"-//Hibernate/Hibernate?Mapping?DTD?3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"
>
<!-- ?
????Mapping?file?autogenerated?by?MyEclipse?-?Hibernate?Tools
-->
< hibernate-mapping >
????
< class? name ="com.hibernate.po.TcommTable" ?abstract ="true" ?dynamic-insert ="true" >
????????
< id? name ="id" ?type ="string" >
????????????
< column? name ="id" ? />
????????????
< generator? class ="uuid" ? />
????????
</ id >
????????
< property? name ="fileName" ?type ="string" >
????????????
< column? name ="fileName" ?length ="100" ? />
????????
</ property > ????????
????????
< property? name ="audState" ?type ="string" >
????????????
< column? name ="audState" ?length ="2" ? />
????????
</ property >
????????
? < property? name ="tableName" ?type ="string" ?insert ="false" >
????????????
< column? name ="tableName" ?length ="32" ? />
????????
</ property >
????
</ class >
</ hibernate-mapping >

上面的配置文件是抽象的abstract ="true" ?.

要生成相應的po:

??????? public abstract class TcommTable implements Serializable {

??????????????? private String id;

??????????????? private String fileName;

???????????????private String tableName;

????????????? //生成set/get()方法

??????? }

table1表特有的字段生成配置文件和po,都是TcommTable 的子類

table1表的配置文件Table1.hbm.xml

<? xml?version="1.0" ?>
<! DOCTYPE?hibernate-mapping?PUBLIC?"-//Hibernate/Hibernate?Mapping?DTD?3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"
>
<!-- ?
????Mapping?file?autogenerated?by?MyEclipse?-?Hibernate?Tools
-->
< hibernate-mapping >
????
< union-subclass? name ="com.hibernate.po.Table1" ?table ="Table1" ?extends ="com.hibernate.po.TcommTable " >
??????
????????????
????????????
< property? name ="isDel" ?type ="string" >
????????????????
< column? name ="isDel" ?length ="2" ? />
????????????
</ property >
??????????
?????????????? < property? name ="fileTypeId" ?type ="integer" >
????????????????
< column? name ="fileTypeId" ? />
????????????
</ property >
????????????? < property? name ="code1" ?type ="string" >
????????????????
< column? name ="code1" ?length ="50" ? />
????????????
</ property >
?????????????? < property? name ="code2" ?type ="string" >
????????????????
< column? name ="code2" ?length ="50" ? />
????????????
</ property >
????????????? < property? name ="code3" ?type ="string" >
????????????????
< column? name ="code3" ?length ="50" ? />
????????????
</ property >
???
??????
</ union-subclass >
</ hibernate-mapping >

?

??table1的po:

????public class Table1? extends TcommTable {


?????????????????private String isDel;????

???????????????? private String fileTypeId;

???????????????? private String code1;

???????????????? private String code2;

??????????????? ?private String code3;

???????????????? //生成set/get()方法

??????? }

?????? (2)運用java的反射機制實現模塊的共用性

?????? 當30多張表公用一個審核模塊的時候,把抽象類TcommTable傳到審核模塊,如何知道這個抽象類是那張具體的表呢?就用到了java反射機制了,因為抽象類無法new出對象來,所以就要用java反射機制.

????? 在審核的action里面實現java的反射機制,主要代碼如下:

???? String tableName = request.getParameter("tableName");

???? String allName = "com.hibernate.po." + tableName;

??? TcommTable?tomm = (TcommTable) Class.forName(allName).newInstance();

????這樣,就能得到table1所有的字段(公共字段和table1特有的字段),然后把要審核的內容放進tomm這個對象里面就行了.注意,java反射機制必須要帶上類的完整包名,否則反射出錯.tableName字段是區分30多張表的識別字段,通過這個字段,hibernate就自動可以判斷出是哪個表和相應的類了,然后通過反射就能得到相應類的所有字段了,因為公共字段放在一個抽象類里面,抽象類無法new對象,所以只能通過反射機制來實現了.

?

hibernate繼承關系映射和java反射機制的運用


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦?。?!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 伊香蕉大综综综合久久 | 国产精品网页 | 精品91精品91精品国产片 | 日本欧美一区二区三区不卡视频 | 中国女人内谢69xxxxx高清 | 黄色毛片毛茸茸 | 亚洲成a人在线播放www | 99国产精品一区二区 | 看免费的毛片 | 中文字幕亚洲区 | 久久久久久九九 | 四虎成人4hutv影院 | 69做爰视频在线观看 | 伊人网在线视频 | 亚洲一区二区中文 | 日韩精品欧美高清区 | 奇米91| 中文字幕久精品免费视频 | 四虎精品永久免费 | 欧美日韩影视 | 国产午夜亚洲精品久久www | 亚洲乱码中文字幕久久 | 一级毛片成人免费看免费不卡 | 成年女人色毛片免费看 | 天天干天天射天天舔 | 久久精品一区二区三区不卡牛牛 | 中文偷拍视频在线观看 | 国产精品美女自在线观看免费 | 色综久久天天综合绕视看 | 日日夜夜精品免费视频 | 亚洲专区第一页 | 国产精品一区二区三区四区五区 | 午夜毛片福利 | 久久一精品 | 日日狠狠久久8888av | 久草美女视频 | 亚洲国产男人本色在线观看的a站 | 国产亚洲精品91 | 麻豆国产原创最新在线视频 | 免费毛片视频 | 国产精品中文字幕在线观看 |