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

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在线精品 | 奇米影视一区二区三区 | 亚洲精品视频在线播放 | 在线视频 中文字幕 | 国产日韩欧美一区二区三区综合 | 欧美日韩在线成人免费 | 一级毛片免费观看不收费 | 波多野结衣绝顶大高潮 | 久久亚洲福利 | 国产一区二区在线观看视频 | 成年女人在线视频 | 日本欧美一区二区三区乱码 | 久久99这里精品8国产 | 日韩精品视频观看 | 理论片在线观看视频 | 天天拍天天干 | 青草五月天 | 男人天堂视频在线观看 | 深夜成人在线 | 99久热在线精品视频播放6 | 久久精品免费观看 | 91精品免费久久久久久久久 | 这里只有久久精品 | 老头与老头同性tube可播放 | 久久精品国产免费观看99 | 中文字幕第66页永久乱码 | 日本人成18在线播放 | 亚洲性一级理论片在线观看 | 欧美片欧美日韩国产综合片 | 天天搞天天搞 | 一级片视频免费观看 | 毛片a级放荡的护士hd | 久久精品亚洲日本波多野结衣 | 欧美激情一区二区三区中文字幕 | 亚洲精品自拍视频 |