<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    love fish大鵬一曰同風起,扶搖直上九萬里

    常用鏈接

    統計

    積分與排名

    friends

    link

    最新評論

    Hibernate O/R映射三大基本定則(轉)

    1. 引言
    在Java環境下,有多種對象關系映射方法,如實體Bean、OJB、JDO、JDBC等。Hibernate是一種新的O/R映射工具,它不僅提供了從Java類到數據表的映射,也提供了數據查詢和恢復等機制。Hibernate非常簡單易學,目前國內有很多同行已經或正在用Hibernate開發實施項目;但Hibernate有很多規則不為人知或應用甚少。本文的目的就是將這些規則歸納總結,希望對您的開發和設計有益。

    首先聲明,本文是Hibernate入門級文章,高手請不用往下看了。

    2. 基本定則

    定則一:數據庫配置文件名稱可以不是Hibernate.properties或Hibernate.cfg.xml

    由于Hibernate官方文檔(本文指www.hibernate.org的文檔)的影響,很多Hibernate開發者誤以為系統一定要有名稱為Hibernate.properties或Hibernate.cfg.xml的文件,而且一定要放在classes的根目錄下。實際上,該文件只是一般的配置文件,名稱可以自己取,文件位置可以自己定,而且在多數據庫環境下,可以有多個配置文件,使得程序可以連接多個數據庫。只是您在創建會話工廠時需要特殊處理,代碼示例如下:

    //配置文件名稱

    protected static String CONFIG_FILE = "my_hibernate.config";

    //配置文件目錄,可以考慮在該目錄下存放系統所有配置文件,此處使用虛擬機參數

    String configPath = System.getProperty("my.config");

    //創建會話工廠

    sessionFactory =( new Configuration().configure(new File(configPath+File.separator+CONFIG_FILE))) .buildSessionFactory();



    定則二:小型項目中,.hbm.xml文件可以合并到一個文件中

    同樣由于Hibernate官方文檔的影響,很多Hibernate開發者誤以為Hibernate的對象關系映射一定要一個表對應一個對象,并將映射文件和對象文件放在同一目錄下。實際上,該模式是為規范性考慮而設計的,因為在多人參與的項目中,多人要維護同一文件容易產生沖突;當項目比較小時,配置文件的維護人員少,我們完全可以將.hbm.xml文件合并到一個或者幾個文件中。依據作者本人的項目設計開發經驗,最好是項目中有幾人同時從事O/R映射和持久工作,則設定幾個.hbm.xml文件,每人維護一個。當然,為了便于分類和管理,每人的工作應該按邏輯劃分。

    大型項目中的文件配置示例如下:

    <hibernate-configuration>

    <session-factory>

    <!—映射文件分散 -->

    <mapping resource="com/hongsoft/test/ persistence/Cat.hbm.xml"/>

    <mapping resource="com/hongsoft/test/ persistence/Animal.hbm.xml"/>

    </session-factory>

    </hibernate-configuration>

    小型項目中的文件配置示例如下:

    <hibernate-configuration>

    <session-factory>

    <!—映射文件集中 -->

    <mapping resource="res_hibernate_map.xml"/>

    </session-factory>

    </hibernate-configuration>

    要注意的是, 從對Hibernate源代碼的分析可知,指定映射文件時,不能用絕對目錄,只能用相對目錄;而且,系統以classes根目錄為當前目錄。



    定則三:對象關系映射是以.hbm.xml文件為基準的,而不是以PO文件為基準

    該定律的意思是:系統啟動檢查您的對象關系映射是否正確時,是以.hbm.xml為基準來進行檢查的;對象文件的property可以比映射文件的property多,但不能少。如果您有如下的映射:

    <class name="com.hongsoft.test.User" table="res_user">

    <id name="id" column="id" type="long" unsaved-value="any">

    <generator class="assigned">

    </generator>

    </id>

    <property name="name"/>

    <property name="loginName"/>

    <property name="passwd"/>

    </class>

    系統啟動,檢查數據庫和其他配置正確后,將以該文件為基準,首先檢查User對象中有無id屬性和對應的get/set方法,如果沒有則報錯,如果有且正確則檢查有無name屬性和對應的get/set方法……,直到文件結束。要注意的是,如果屬性為name,則get方法名稱必須為getName(),set方法名稱必須為setName(),否則會報錯。

    如果User對象除了有id,name,loginName, passwd四個屬性和對應的方法,還有其它的屬性和方法,會報錯嗎?不會,因為對象關系映射是以.hbm.xml文件為基準的,而不是以PO文件為基準。您在項目中可以充分利用該特點,實現您自己的比較特殊的需求。例如,您可以在User對象中加入updatedPasswd表示更改后的口令,由此構造在表示層要使用的FormBean和在業務層要使用的ValueObject。當然,這樣做也有缺點,需要根據您的實際情況而定。

    3. 總結
    上面是作者對Hibernate映射的容易理解錯誤的知識點的歸納總結,希望對您有幫助。如果您發現有錯誤或有自己的觀點,歡迎討論。

    posted on 2007-03-29 15:06 liaojiyong 閱讀(398) 評論(0)  編輯  收藏 所屬分類: Hibernate

    主站蜘蛛池模板: 精品久久久久久亚洲精品| 亚洲电影一区二区三区| 亚洲欧美综合精品成人导航| 久久久久久AV无码免费网站| 中文字幕不卡亚洲| fc2免费人成在线| 亚洲理论电影在线观看| a视频免费在线观看| 亚洲精品国产字幕久久不卡| 成人性生交大片免费看好| 久久亚洲国产欧洲精品一| 久久国产乱子精品免费女| 亚洲AV乱码一区二区三区林ゆな | 猫咪免费观看人成网站在线| 夭天干天天做天天免费看| 亚洲日韩中文字幕无码一区| 日本不卡在线观看免费v| 阿v免费在线观看| 国产性爱在线观看亚洲黄色一级片 | 免费鲁丝片一级在线观看| 亚洲AV成人无码久久WWW| 亚洲成?v人片天堂网无码| 国产99视频精品免费视频76| 亚洲AV日韩AV高潮无码专区| 免费在线看v网址| 亚洲精品宾馆在线精品酒店| www.亚洲一区| 日韩精品免费视频| 亚洲影视自拍揄拍愉拍| 亚洲av无码成人精品区在线播放 | 永久在线免费观看| 亚洲精品无播放器在线播放| 亚洲精品99久久久久中文字幕| 伊人久久大香线蕉免费视频| 亚洲日韩乱码久久久久久| 成人永久免费福利视频网站| 两性色午夜视频免费播放| 亚洲ts人妖网站| 国产亚洲?V无码?V男人的天堂 | 亚洲综合无码一区二区三区| 免费高清在线影片一区|