欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

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

系統 1823 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條評論
主站蜘蛛池模板: 无码色情影片视频在线看免费 | 亚洲国产第一区 | 亚洲精品一区二区三区四区高清 | 欧美一区久久久 | 亚洲免费观看视频 | 国产福利资源在线 | 婷婷六月综合网 | 一级视频在线播放 | 国产精品一区在线观看你懂的 | 2022最新a精品视频在线观看 | 午夜精品久久久久久久星辰影院 | 国产野花视频天堂视频免费 | 久草在线国产视频 | 亚洲视频国产一区 | 天天插一插| 精品久久久爽爽久久久AV | 亚洲日本天堂在线 | 1024污视频 | 日韩一级大毛片欧美一级 | 一区二区三区在线看 | 免费一级特黄3大片视频 | 山岸逢花在线观看无删减 | 三级视频在线播放 | 久草免费在线播放 | 日本午夜精品一区二区三区电影 | 国产精品手机在线观看 | 麻豆md国产在线观看 | 久久亚洲欧美日韩精品专区 | 日本护士xxxxx极品 | 欧美一区二区在线视频 | 亚洲视频一区在线观看 | 日韩av影院在线观看 | 九色在线| 中文字幕视频在线观看 | 亚洲在线视频网站 | 日本亚洲天堂网 | 亚洲国产中文字幕 | 奇米影视小说 | 久久丁香 | 日韩中文一区 | 国产乱色精品成人免费视频 |