欧美三区_成人在线免费观看视频_欧美极品少妇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條評論
主站蜘蛛池模板: 欧美成人全部费免网站 | 亚洲成a人片在线看 | 小明成人免费视频 | 欧美精品久久一区 | 一区在线视频 | 亚洲一级视频在线观看 | 国产熟妇无码A片AAA毛片视频 | 久久免费看少妇高潮A片JA小说 | 午夜小网站 | 精品一区二区三区的国产在线观看 | 伊人蕉久影院 | 黄色婷婷| 精品福利在线视频 | 日韩av免费在线观看 | 精品久久久久久久人人人人传媒 | 九九99久久精品在免费线bt | 欧美大黑bbb | 五月天婷婷精品视频 | 欧美成人一区二区三区 | 久久亚洲欧美日本精品品 | 青娱乐极品在线 | 久久国产欧美日韩精品 | 奇米奇米色 | 日本高清视频www夜色资源网 | 97人人澡人人爽91综合色 | 国产噜噜噜精品免费 | 成人免费视频网站在线观看 | 狠狠色丁香婷婷久久综合考虑 | 热er99久久6国产精品免费 | 国产免费又色又爽又黄的网站 | 国产精品一区二区久久久久 | 欧美视频第一页 | 久久国产天堂福利天堂 | 国产一区二区免费 | 在线免费黄色 | 成人黄色免费网站 | 免费久久网站 | 中文在线视频 | 98精品国产高清在线xxxx | 99久久精品久久久久久清纯 | 福利网在线 |