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

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

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

    和風細雨

    世上本無難事,心以為難,斯乃真難。茍不存一難之見于心,則運用之術自出。

    Hibernate概述

     

    本文假定讀者已經熟知以下知識

    能夠熟練使用JDBC創建Java應用程序;
    創建過以數據庫為中心的應用
    理解基本的關系理論和結構化查詢語言SQL (Strutured Query Language)

    Hibernate

    Hibernate是一個用于開發Java應用的對象/關系映射框架。它通過在數據庫中為開發人員存儲應用對象,在數據庫和應用之間提供了一座橋梁,開發人員不必編寫大量的代碼來存儲和檢索對象,省下來的精力更多的放在問題本身上。

    持久化與關系數據庫

    持久化的常見定義:使數據的存活時間超過創建該數據的進程的存活時間。數據持久化后可以重新獲得它;如果外界進程沒有修改它,它將與持久化之前相同。對于一般應用來說,持久化指的是將數據存儲在關系數據庫中。
    關系數據庫是為管理數據而設計的,它在存儲數據方面很流行,這主要歸功于易于使用SQL來創建和訪問。
    關系數據庫使用的模型被稱為關系模型,它使用二維表來表示數據。這種數據邏輯視圖表示了用戶如何看待包含的數據。表可以通過主碼和外碼相互關聯。主碼唯一的標識了表中的一行,而外碼是另一個表中的主碼。

    對象/關系阻抗不匹配

    關系數據庫是為管理數據設計的,它適合于管理數據。然而,在面向對象的應用中,將對象持久化為關系模型可能會遇到問題。這個問題的根源是因為關系數據庫管理數據,而面向對象的應用是為業務問題建模而設計的。由于這兩種目的不同,要使這兩個模型協同工作可能具有挑戰性。這個問題被稱為 對象/關系阻抗不匹配(Object/relational impedance mismatch)或簡稱為阻抗不匹配

    阻抗不匹配的幾個典型方面

    在應用中輕易實現的對象相同或相等,這樣的關系在關系數據庫中不存在。
    在面向對象語言的一項核心特性是繼承,繼承很重要,因為它允許創建問題的精確模型,同時可以在層次結構中自上而下的共享屬性和行為。而關系數據庫不支持繼承的概念。
    對象之間可以輕易的實現一對一,一對多和多對多的關聯關系,而數據庫并不理解這些,它只知道外碼指向主碼。

    對象/關系映射

    前頁列舉了一些阻抗不匹配的問題,當然開發人員是可以解決這些問題,但這一過程并不容易。對象/關系映射(Object/Relational Mapping)就是為解決這些問題而開發的。
    ORM在對象模型和關系模型之間架起了一座橋梁,讓應用能夠直接持久化對象,而不要求在對象和關系之間進行轉換。Hibernate就是ORM工具中最成功的一種。它的主要優點是簡單,靈活,功能完備和高效。

    Hibernate的優點之一:簡單

    Hibernate不像有些持久化方案那樣需要很多的類和配置屬性,它只需要一個運行階段配置文件已經為每個要持久化的應用對象指定一個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">
    <hibernate-mapping package="org.hibernate.auction">
      <class name="com.sitinspring.domain.User"
        table="USERTABLE_OKB" lazy="false">
        <id name="id" column="ID" >
          <generator class="uuid.hex"/>
        </id>
        <property name="name" column="name" />
        <property name="password" column="pswd" />
        <property name="email" column="email" />
        <property name="lastLoginTime" column="lastLoginTime" />
        <property name="lastLoginIp" column="lastLoginIp" />
      </class>
    </hibernate-mapping>

    Hibernate的優點之二:功能完備

    Hibernate支持所有的面向對象特性,包括繼承,自定義對象類型和集合。它可以讓你創建模型時不必考慮持久層的局限性。
    Hibernate提供了一個名為HQL的查詢語言,它與SQL非常相似,只是用對象屬性名代替了表的列。很多通過SQL實現的常用功能都能用HQL實現。

    Hibernate的優點之三:高效

    Hibernate使用懶惰加載提高了性能,在Hibernate并不在加載父對象時就加載對象集合,而只在應用需要訪問時才生成。這就避免了檢索不必要的對象而影響性能。
    Hibernate允許檢索主對象時選擇性的禁止檢索關聯的對象,這也是一項改善性能的特性。
    對象緩存在提高應用性能方面也發揮了很大的作用。Hibernate支持各種開源和緩存產品,可為持久化類或持久化對象集合啟用緩存。

    總結

    在同一性,繼承和關聯三方面,對象模型和關系模型存在著阻抗不匹配,這是眾多ORM框架致力解決的問題,hibernate是這些方案中最成功的一個,它的主要優點是簡單,靈活,功能完備和高效。
    使用Hibernate不要求領域對象實現特別的接口或使用應用服務器,它支持集合,繼承,自定義數據類型,并攜帶一種強大的查詢語言HQL,能減少很多持久化方面的工作量,使程序員能把更多精力轉移到問題本身上來。

    posted on 2008-04-30 16:35 和風細雨 閱讀(1424) 評論(0)  編輯  收藏 所屬分類: Hibernate

    主站蜘蛛池模板: 国产精品亚洲va在线观看| 午夜高清免费在线观看| 羞羞网站在线免费观看| 久久精品a亚洲国产v高清不卡 | 久久亚洲私人国产精品| 亚洲福利精品电影在线观看| 免费无码精品黄AV电影| 久久九九全国免费| 国产免费AV片在线观看播放| 亚洲а∨精品天堂在线| 亚洲国产成人精品激情| 亚洲一区二区电影| 亚洲大片在线观看| 日韩亚洲一区二区三区| 亚洲AV网站在线观看| 免费无码看av的网站| 国产一精品一AV一免费孕妇| 在线免费观看亚洲| 一级毛片免费观看不卡视频| 热久久这里是精品6免费观看| 日韩在线一区二区三区免费视频| 亚洲高清毛片一区二区| 亚洲色精品三区二区一区| 亚洲国产综合在线| 亚洲小说图片视频| 亚洲另类图片另类电影| 亚洲娇小性xxxx色| 在线观看亚洲AV日韩A∨| 国产成人精品日本亚洲专| 亚洲另类小说图片| 亚洲娇小性色xxxx| 精品国产成人亚洲午夜福利| 2020年亚洲天天爽天天噜| 亚洲sss综合天堂久久久| 亚洲国产精品张柏芝在线观看| 精品亚洲国产成AV人片传媒| 亚洲成人午夜在线| 久久久久亚洲av无码专区喷水| 亚洲精品日韩专区silk| 亚洲日韩乱码中文无码蜜桃| 亚洲av乱码一区二区三区香蕉|