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

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

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

    posts - 89,  comments - 98,  trackbacks - 0
    Pro Hibernate 3筆記和小結(2)之第一章Hibernate3介紹

    /**
    作者:Willpower
    來源:Rifoo Technology(
    http://www.rifoo.com
    時間:2006-05
    備注:轉載請保留以上聲明
    **/


    今天繼續(xù)第一章的學習,我們先來看看EJB和Hibernate的區(qū)別。

    為什么不用EJB來存儲,顯示,查詢數(shù)據(jù)庫中的數(shù)據(jù)呢?嚴格的說,EJB服務器支持兩種類型的持久化,就是BEAN管理的持久化(BMP)和容器管理的持久化(CMP)。在BMP中,Bean自己負責執(zhí)行所有的SQL語句來完成存儲和查詢數(shù)據(jù)。換句話說,我們自己要去編寫JDBC邏輯代碼。另一方面,CMP是由容器來執(zhí)行存儲和檢索bean數(shù)據(jù)的工作。

    我們這里不選擇EJB的原因如下:
    1 CMP實體bean需要和數(shù)據(jù)表一對一的映射
    2 它們很慢
    3 有時候要人工參與的去決定哪一個bean字段對應表的哪一列
    4 它們對方法命名有要求
    5 EJB的容器是重量級的
    6 它們和容器依賴強,不容易移植

    下面看看Hibernate的特點:
    1 不需要強制映射一個POJO到一個表,不強制一對一的關系
    2 盡快啟動并加載它的配置文件時會對性能有些負載,但總的來說,它是很快的工具
    3 和容器沒有強依賴,很方便的移植
    4 可以很輕松的處理serializable POJOs

    以上只是簡單的列舉,還有很多特點都沒有提及。總之,Hibernate在應用程序的持久層這一塊是非常不錯的框架。下面我們來看一個Hibernate的Hello world程序:

    Listing 1-4. Hibernate檢索POJO的范例代碼
    CODE:

    public static Motd getMotd(int messageId)
    ? ? ? ? ? ? ? ? ? throws MotdException
    {
    ? SessionFactory sessions =
    ? ? ? ? ? ? new Configuration().configure().buildSessionFactory();
    ? Session session = sessions.openSession();
    ? Transaction tx = null;
    ? try {
    ? ? tx = session.beginTransaction();
    ? ? Motd motd =
    ? ? ? ? ? ? (Motd)session.get( Motd.class,
    ? ? ? ? ? ? new Integer(messageId));
    ? ? tx.commit();
    ? ? tx = null;
    ? ? return motd;
    ? } catch ( HibernateException e ) {
    ? ? if ( tx != null ) tx.rollback();
    ? ? ? ? log.log(Level.SEVERE, "Could not acquire message", e);
    ? ? ? ? throw new MotdException(
    ? ? ? ? ? ? "Failed to retrieve message from the database.",e);
    ? } finally {
    ? ? session.close();
    ? }
    }


    大家可以看到,代碼量減少了很多,SessionFactory通常用于原來類似EJB的JNDI尋址操作。
    由于messageId是Motd對象的主鍵,我們只用了一行代碼就完成了數(shù)據(jù)的檢索工作:

    Motd motd = (Motd)session.get(Motd.class, new Integer(messageId));

    如果不是直接關鍵主鍵的那些更復雜一些的查詢,則需要使用SQL或HQL(Hibernate Query Language)。實際上,Hibernate3給我們提供了自動的事務和緩存的功能,因此,我們不用在出錯處理上象JDBC那樣編寫過多的冗余代碼了。

    Hibernate還需要知道哪個表來關聯(lián)哪個對象,這個實際上由一個XML映射文件來提供的。盡管有些工具會造成大量的冗余難讀懂的XML文件,但是Hibernate在這一塊上處理非常輕巧,針對每個需要映射到數(shù)據(jù)庫中的那些POJO對象,我們只需要創(chuàng)建一個簡單而清晰的XML文件就可以了。當然,也可以將所有信息都放到一個大的XML文件中,Hibernate照樣能讀懂它們,可是這種做法不被推薦使用,因為可讀和可維護性都太差了。

    一個文檔類型定義(Document Type Definition,簡稱DTD)文件提供給所有的Hibernate配置文件,因此如果有好的XML編輯器,那么可以使用自動完成和自動驗證XML的很多方便的功能來編輯XML配置文件,有些工具甚至可以自動創(chuàng)建這些配置文件。而Java 5中新加入的注釋語法(annotations)能夠完全取代它們。

    下面是我們的Motd POJO對象到數(shù)據(jù)庫的映射文件:

    Listing 1-5. 映射POJO到數(shù)據(jù)庫的XML文件
    CODE:

    <?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "[url]http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd[/url]">

    <hibernate-mapping>
    ? <class name="Motd" table="Motd">
    ? ? <id name="id" type="int" column="id">
    ? ? ? ? <generator class="native"/>
    ? ? </id>
    ? ? <property name="message" column="message" type="string"/>
    ? </class>
    </hibernate-mapping>


    你可能會問,是不是將復雜性簡單地從應用的代碼轉移到了XML映射文件中了呢?事實上并不是這樣。
    1 XML文件比從結果集返回的復雜的POJO對象更容易編輯和處理
    2 使我們可以排除類似JDBC那樣的錯誤處理機制的代碼復雜性
    3 最重要的是,如果POJO提供類似javabean那樣的屬性訪問方法(即getter和setter方法),和一個默認的構造方法,那么Hibernate的工具可以方便的自動生成XML文件。關于工具的使用在第10章中討論
    posted on 2006-07-28 10:06 水煮三國 閱讀(499) 評論(0)  編輯  收藏 所屬分類: Hibernate
    <2006年7月>
    2526272829301
    2345678
    9101112131415
    16171819202122
    23242526272829
    303112345

    常用鏈接

    留言簿(4)

    隨筆分類(85)

    隨筆檔案(89)

    文章分類(14)

    文章檔案(42)

    收藏夾(37)

    java

    oracle

    Sybase

    搜索

    •  

    積分與排名

    • 積分 - 210820
    • 排名 - 266

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 99久久亚洲综合精品成人网| 亚洲国产精品自产在线播放| 日本久久久久亚洲中字幕| 最新国产乱人伦偷精品免费网站 | 最近的免费中文字幕视频 | 777成影片免费观看| 亚洲综合一区二区精品导航| 99久久久国产精品免费牛牛| 久久久久久亚洲精品成人| 24小时日本韩国高清免费| 亚洲日本国产精华液| 免费看国产精品3a黄的视频| 亚洲AV日韩AV永久无码色欲| 亚洲精品国产高清不卡在线| 国产自国产自愉自愉免费24区| 亚洲AV日韩精品久久久久久 | 亚洲国产精品人久久电影| 国产v精品成人免费视频400条| 亚洲色大18成人网站WWW在线播放| 国产男女猛烈无遮档免费视频网站| 免费观看又污又黄在线观看| 久久国产成人亚洲精品影院| 波多野结衣免费一区视频 | 国产亚洲精品91| 亚洲欧洲精品成人久久奇米网 | 久久精品蜜芽亚洲国产AV| 台湾一级毛片永久免费| 亚洲精华国产精华精华液网站| 免费人成在线观看网站视频| 黄网站色视频免费在线观看的a站最新 | 成人妇女免费播放久久久| 久久精品国产亚洲AV麻豆网站| 久久久久久99av无码免费网站| 在线91精品亚洲网站精品成人| 亚洲国产精品嫩草影院在线观看 | 日韩在线看片免费人成视频播放| 最好2018中文免费视频| 久久久久亚洲av无码尤物| 久久久www成人免费毛片| 日韩一级片免费观看| 1区1区3区4区产品亚洲|