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

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

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

    Hibernate 3新增XML關系持久性介紹(轉(zhuǎn))

    非常感謝最近發(fā)布的Hibernate 3中的XML持久性特性,Java開發(fā)者現(xiàn)在擁有了一個框架組件,它為易于實現(xiàn)的對象關系(OR)和XML持久性提供了高效的和一致的方法。

      Hibernate的易用性、高性能和對象關系持久性等高級特性給IT界帶來了很大的驚喜。 Hibernate的最新版本(版本3,3月29日發(fā)布的)給產(chǎn)品API帶來了一個重要的新特性:XML持久性。有了Hibernate 3之后,Java應用程序開發(fā)者可以輕易地把XML文檔合并到關系型數(shù)據(jù)庫中。

      這個新特性應該明確地告訴已有的Hibernate開發(fā)者,因為它也遵循POJO(純的舊Java對象)相同的一致性方法,需要學習的知識最少。XML持久性的優(yōu)點也應該介紹給新用戶。本文講解的是Hibernate 3持久性方法。

      XML持久性為什么重要

      大多數(shù)大型商業(yè)數(shù)據(jù)庫都支持某種形式的本地XML持久性。由于XML持久性是一個相對較新的機制--即使對大型廠商也是如此,這個領域中的標準還在不斷地浮現(xiàn)。其結(jié)果是,為了把無處不在的關系型持久性機制與日益增長的XML解決方案集成在一起,架構師必須依賴廠商特定的特性或者實現(xiàn)定制的XML持久性框架組件。這兩個選擇都沒有太大的吸引力。廠商特定的特性不是普及的,因為可能產(chǎn)生廠商封鎖(lock-in),而定制的框架組件實現(xiàn)可能耗費大量的時間和財力,導致代碼難于維護。

      在OR(對象關系)持久性方面,Hibernate XML持久性是一個自然而然的解決方案。它可以跨越Hibernate支持的所有關系型平臺(如虛擬的或真實的關系型平臺)移動,允許自由的遷移對象、基于XML的應用程序和集成解決方案而不用擔心下層的關系型實現(xiàn)方法。

      體系結(jié)構的細節(jié)信息

      Hibernate是一個良好架構的框架組件,它無縫地利用了本地的環(huán)境,不需要用戶進行任何特殊的干涉或安裝操作。從一個數(shù)據(jù)庫切換到另外一個數(shù)據(jù)庫通常只需要改變驅(qū)動程序,并配置Hibernate(在線配置設置信息)來使用另外一種數(shù)據(jù)庫語言。

      Hibernate利用dom4j框架組件進行XML的分析和維護。如果需要完全利用Hibernate的XML特性,你就必須對dom4j非常熟悉。一般來說,你會發(fā)現(xiàn)dom4j比Java提供的JAXP或與JAXP兼容的XML分析器要容易使用一些。它要求我們學習的相關知識較少,并且利用最少的dom4j知識你就能夠高效率地使用Hibernate XML持久性。

    實際例子:價格目錄同步

      通用的電子商務案例可以演示XML關系持久性機制的作用。我們來考慮一個示例,在這個例子中XML集成了在線零售商和供應商之間的產(chǎn)品標價目錄。

      該電子目錄包含了已標價的產(chǎn)品列表。在線商店銷售產(chǎn)品,通過自己的存貨清單來管理(類似于Amazon與Toys-R-Us和運動產(chǎn)品商店之間的關系)。為了精確地和有效地反映價格的變化,在線零售商必須頻繁地接收產(chǎn)品價格信息。它把這些信息存放為XML文檔,如下所示:

    <products>
    <product prod_id="3" sku="100101">
    <description>Athlete mode body fat scale</description>
    <list_price>100.00</list_price>
    <drop_price>60.00</drop_price>
    </product>
    <product prod_id="4" sku="100102">
    <description>Thermometer</description>
    <list_price>20.00</list_price>
    <drop_price>11.00</drop_price>
    </product>
    </products>

      全面的主要的產(chǎn)品價格列表存儲在數(shù)據(jù)庫中,如下所示:

    CREATE TABLE PRODUCT
    (
    id INT UNIQUE NOT NULL,
    description VARCHAR(45) NOT NULL,
    sku VARCHAR(45) UNIQUE NOT NULL,
    list_price FLOAT,
    base_price FLOAT,
    order_price FLOAT,
    CONSTRAINT PK_PRODUCT PRIMARY KEY (id )
    )

      在線零售商通過已有的OR映射提供定價目錄的Web表現(xiàn)形式,定價產(chǎn)品都表現(xiàn)為demo.Product Java對象:

    /** Product對象表現(xiàn)了定價目錄項*/
    public class Product {
    int id;
    String sku;
    String description;
    Double listPrice;
    Double basePrice;
    Double orderPrice;

      這些對象按照下面的方式映射(為了清楚,我們列出了列名,盡管在屬性和列名相匹配的時候Hibernate可以自動地把屬性映射為列名):

    <?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="demo">
    <class name="Product"
    table="product"
    node="product">
    <id name="id"
    type="int"
    node="@prod_id"
    column="id">
    </id>
    <property name="sku" node="@sku" column="sku" not-null="true"/>
    <property name="description" node="description" column="description" not-null="true"/>
    <property name="listPrice" node="list_price" column="list_price" />
    <property name="basePrice" node="drop_price" column="base_price"/>
    <property name="orderPrice" column="order_price"/>
    </class>
    </hibernate-mapping>

      在這種情況下,Hibernate的XML關系持久性就非常方便了。由于該電子商務應用程序接收了包含產(chǎn)品價格更新的XML,它就利用Hibernate的XML持久性機制把這些XML寫入到產(chǎn)品數(shù)據(jù)庫中。Hibernate提供了幾種XML持久性選擇,包括Hibernate的saveOrUpdate方法:

    document = saxReader.read(inputXML);
    List users = document.selectNodes("http://product");
    try {
     Session session = ibernateUtil.sessionFactory.openSession();
     Transaction transaction = session.beginTransaction();
     Session dom4jSession = session.openSession(EntityMode.DOM4J);
     Iterator iter = users.iterator();
     while (iter.hasNext()) {
      Object next = iter.next();
      dom4jSession.saveOrUpdate("demo.Product", next );
     }// end while
    transaction.commit();
    session.close(); 

      XML映射語法

      上面的例子中使用的映射文件不用于Hibernate 2的映射文件。Hibernate 3引入了幾種專門用于XML持久性的新映射類型。

      主要的新映射屬性是節(jié)點(node),它與被映射的XML文檔中的一個元素或文檔中的屬性相關聯(lián)。

      一個"節(jié)點"可能表現(xiàn)為下面的某種映射:

      · "element-name(元素名)":在例子中,<product></product>元素會被表示為node="product"。

      · "@attribute-name(屬性名)":在例子中,node="@sku"會被映射為XML屬性<product sku="1001001">。

      · ".(句點)":映射為元素的父元素(例如<products>就<product>是的父元素)。

      · "element-name/@attribute-name(元素名/屬性名)":映射為命名元素的屬性(product/@sku)。

      XML持久性并非Hibernate的主要任務

      Hibernate 3框架組件高效率地實現(xiàn)了目前最通用的一些方法(除了LDAP之外)。Java社團現(xiàn)在擁有了一套框架組件,它為易于實現(xiàn)的OR和XML持久性提供了高效率的和一致性的方法。

      在我們知道上面一些內(nèi)容之后,了解Hibernate項目的任務是很重要的。盡管Hibernate 3的XML特性非常有用、有吸引力,但是它們并不是用來代替最流行的XML編組(marshalling)和轉(zhuǎn)換(transformation)框架組件的。不管它的OR映射解決方案多么完善,我們都不應該期待Hibernate成為主流的XML維護框架組件(根據(jù)Hibernate的作者Gavin King在TheServerSide Java Symposium 2005上的發(fā)言)。

      由于這個原因,你應該把XML持久性特性看作是已有的強大的Hibernate框架組件的有用的擴展,它允許你輕易地把現(xiàn)在流行的其它的數(shù)據(jù)表現(xiàn)機制合并到自己的應用程序中。但是,如果你必須處理復雜的集成和轉(zhuǎn)換情況,最好去尋找其它的XML專用的框架組件。

    posted on 2008-01-10 11:41 靈! 閱讀(281) 評論(0)  編輯  收藏 所屬分類: Java技術-hibernate

    <2008年1月>
    303112345
    6789101112
    13141516171819
    20212223242526
    272829303112
    3456789

    導航

    統(tǒng)計

    隨筆分類

    隨筆檔案

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲av无码天堂一区二区三区| 皇色在线视频免费网站| 免费在线视频一区| 亚洲AV无码国产一区二区三区| 久久精品国产亚洲av日韩| 亚洲大成色www永久网址| 亚洲免费福利在线视频| 亚洲国产日韩在线一区| 在线观看免费高清视频| 亚洲日韩一区精品射精| 成年女人永久免费观看片| 精品韩国亚洲av无码不卡区| 国产一精品一aⅴ一免费| 免费人成网站永久| 久久伊人亚洲AV无码网站| 中国一级全黄的免费观看| 国产亚洲精品无码成人| 9420免费高清在线视频| 亚洲人成7777| 全部免费毛片免费播放| 999zyz**站免费毛片| 老司机亚洲精品影院| 成年女人免费视频播放77777| 免费亚洲视频在线观看| 伊人久久综在合线亚洲91| 一区二区三区在线免费看| 久久久久se色偷偷亚洲精品av | 最近2019中文字幕mv免费看| 99亚洲乱人伦aⅴ精品| 亚洲毛片不卡av在线播放一区| 免费h视频在线观看| 国产成人亚洲合集青青草原精品 | 无码一区二区三区AV免费| 婷婷国产偷v国产偷v亚洲| 亚洲中文字幕无码永久在线| 日本片免费观看一区二区| 亚洲日韩在线中文字幕综合| 久久91亚洲人成电影网站| 97视频热人人精品免费| jizz中国免费| 亚洲一级毛片视频|