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

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

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

    隨筆-86  評論-767  文章-3  trackbacks-3

       雖然在04年5月份的畢業(yè)設(shè)計中使用了Hibernate,不過核心模塊不是自己寫的,所以陌生的部分多過熟悉的.有些東西的理解是需要經(jīng)過實踐的積累的,不是僅僅依靠看理論材料和寫簡單的測試代碼可以做到的.

       A、什么時候使用Hibernate?

       Hibernate是業(yè)界一個比較成熟的流行的O/R Mapping框架.
       說它成熟,因為他提供了一個O/R Mapping產(chǎn)品最主要的功能,比如數(shù)據(jù)庫映射、連接池管理、事務(wù)支持等等,更重要的,它提供了對多中數(shù)據(jù)庫產(chǎn)品的支持.也許,O/R Mapping和多數(shù)據(jù)庫支持更能夠吸引開發(fā)者的眼球.
       說它流行,因為太多的人使用了,不論是從實用開發(fā)的角度出發(fā),還是從研究的角度出發(fā),甚至是從趕時髦的角度出發(fā).相對于沒有自己的數(shù)據(jù)持久層開發(fā)能力的開發(fā)者角度看,hibernate的確能夠為他們帶來開發(fā)效率的提高,改進軟件架構(gòu).

       那么在什么情況下選擇使用hibernate來構(gòu)建自己的數(shù)據(jù)持久層呢?

    1、自己沒有數(shù)據(jù)持久層開發(fā)能力

    這個當(dāng)然勿庸置疑了.hibernate提供了一套成熟的模型,能夠在短時間內(nèi)構(gòu)建適合業(yè)務(wù)需求的數(shù)據(jù)持久層.當(dāng)然,前提是要對hibernate有基本的使用開發(fā)能力.

    2、對JDBC底層開發(fā)不甚熟悉者.

    hibernate封裝了對JDBC底層的調(diào)用,統(tǒng)一了對不同類型數(shù)據(jù)庫系統(tǒng)的支持.在缺乏對JDBC底層調(diào)用的了解之前,使用Hibernate可以事半功倍.

    3、團隊開發(fā)中統(tǒng)一持久層開發(fā).

    我們把hibernate稱為O/R Mapping開發(fā)框架.既然是框架,那么如果團隊中的成員對這個框架比較熟悉的話,那么可以統(tǒng)一團隊的開發(fā),減少溝通的頻率,促進協(xié)同開發(fā).

    4、自己開發(fā)的數(shù)據(jù)持久層不能滿足業(yè)務(wù)需求.

    如果缺乏對JDBC的了解和數(shù)據(jù)持久層開發(fā)的經(jīng)驗,可能自己開發(fā)的數(shù)據(jù)持久層會慢慢的不滿足業(yè)務(wù)需求.比如在數(shù)據(jù)緩存、連接池管理、多數(shù)據(jù)庫支持等等方面.hibernate在上述方面有比較出色的表現(xiàn),自然在不影響業(yè)務(wù)開發(fā)的前提下可以考慮采用.

    5、希望你的產(chǎn)品不依賴于某種特定的數(shù)據(jù)庫.

    B、如何設(shè)計適用于多種類型數(shù)據(jù)庫的通用產(chǎn)品呢?

    如果你開發(fā)的是一款通用產(chǎn)品,使用了MS-SQL2000數(shù)據(jù)庫,可能某一天你的客戶會要求你將產(chǎn)品遷移到Oracle,理由很簡單--客戶原來就有購買Oracle數(shù)據(jù)庫,不希望再增加數(shù)據(jù)投資了.但是你只能很遺憾的告訴他,你的產(chǎn)品只能使用MS-SQL2000數(shù)據(jù)庫.無疑,你將可能失去一個重要的準(zhǔn)客戶.

    那么,如何設(shè)計適用于多種類型數(shù)據(jù)庫的通用產(chǎn)品而不是提供多個產(chǎn)品版本呢?

    由于JDBC本身就是數(shù)據(jù)庫獨立的,即不依賴于具體的數(shù)據(jù)庫類型.因此,我們可以從以下幾方面進行把握:

    1、盡量使用標(biāo)準(zhǔn)通用的SQL語句.

    2、盡量上不使用各數(shù)據(jù)庫方言和某種數(shù)據(jù)庫特有的函數(shù)或者數(shù)據(jù)類型,盡量通用.

    3、將配置參數(shù)保存在一個properties文件中.

    4、利用Configuration.setProperties(Properties pro)方法載入配置參數(shù)文件,而不是采用Configuration.configuration()默認(rèn)自動載入hibernate.hbm.xml配置文件.

    C、選擇合適的獲得JDBC連接方式

    假設(shè)已經(jīng)配置了數(shù)據(jù)庫表映射文件并得到了SessionFactory:

    Configuration cfg = new Configuration();

    SessionFactory sessionFactory = cfg.buildSessionFactory

    在這里我們討論一下三種獲得JDBC連接的方式:

    1、用戶自己提供JDBC連接:

    java.sql.Connection conn = datasource.getConnection();

    Session session = sessionFactory.openSession(conn);

    這種方式允許用戶程序自己來管理JDBC連接.不過同一個連接上不能打開兩個并行的session.

    2、使用Hibernate默認(rèn)的JDBC連接方式:

    通過一下四種方式設(shè)置JDBC連接參數(shù):

    a、傳遞一個java.util.Properties到Configuration.setProperties();

    b、在classpath目錄提供一個hibernate.properties配置文件;

    c、在hibernate.hbm.xml中包含JDBC配置參數(shù);

    d、通過java -Dproperty=value指定系統(tǒng)屬性.

    之后使用Session session = sessionFactory.openSession()獲取JDBC連接.這個時候所有的hibernate屬性和約束都保存在net.sf.hibernate.cfg.Environment中.

    3、使用JNDI獲得JDBC連接:

    這個應(yīng)該可以歸到2上,不過比較特別,獨立出來.

    使用JNDI獲得JDBC連接要依賴于Application Server的JNDI特性,不過可以將JDBC的管理交給Application Server去完成.采用這種方法獲得的JDBC自動集成Application Server的容器管理事務(wù)的特性.不過如果更換容器之后都需要重新部署容器的JNDI.

    D、什么時候POJO需要實現(xiàn)equals和hashCode方法?

    當(dāng)你需要混合使用POJO的時候,比如使用set,必須考慮重載equals和hashCode,特別是在兩個不同的session裝載POJO.Hibernate只在單個session保證JVM鑒別,而且是使用Object默認(rèn)的equals和hashCode,如果沒有重載equals和hashCode.

    在通常情況下,重載equals和hashCode方法,我們會在方法中比較POJO的標(biāo)識關(guān)鍵字.不過,在hibernate中,如果這個POJO還沒有持久化,那么POJO的表示關(guān)鍵字是不存在的.所以,我們會采用商業(yè)關(guān)鍵字相等的原則來判斷兩個POJO是否相等.

    E、如何合理利用hibernate提供的數(shù)據(jù)二級緩存功能:

    1、惰性載入機制

    2、接口代理機制

    3、隱式多態(tài)機制

    posted on 2005-02-05 14:16 eamoi 閱讀(2586) 評論(2)  編輯  收藏 所屬分類: Java

    評論:
    # re: Hibernate重新學(xué)習(xí)和使用手記(1) 2006-02-05 23:35 | River
    說得很客觀,Hibernate 不過是個O/R Map的框架,如何使用應(yīng)看你實際情況,建議:如果你對關(guān)系數(shù)據(jù)庫及JDBC已經(jīng)有了很好的撐握,沒有必要使用Hibernate.  回復(fù)  更多評論
      
    # re: Hibernate重新學(xué)習(xí)和使用手記(1) 2006-03-04 21:21 | 趙承恩
    留名感謝
    這篇文章中的
    之后使用Session session = sessionFactory.openSession()獲取JDBC連接.這個時候所有的hibernate屬性和約束都保存在net.sf.hibernate.cfg.Environment中.
    這句話非常重要
    讓我一個晚上的工作沒有白費
    非常感謝  回復(fù)  更多評論
      
    主站蜘蛛池模板: 亚洲中文字幕无码久久综合网| 日韩激情淫片免费看| 久久精品九九亚洲精品天堂| 大学生高清一级毛片免费| 亚洲国产精品乱码在线观看97| 亚洲人成免费电影| 亚洲三级视频在线| 成人免费a级毛片无码网站入口 | 日本不卡免费新一二三区| 亚洲第一街区偷拍街拍| 国产免费观看黄AV片| 一级中文字幕乱码免费| 国产亚洲免费的视频看| 一区二区三区观看免费中文视频在线播放 | 免费在线观看一区| 成人午夜亚洲精品无码网站| 免费看搞黄视频网站| 久久精品国产亚洲av高清漫画 | 久久av免费天堂小草播放| 在线亚洲人成电影网站色www| 国产在线观看免费视频软件| 亚洲一区二区三区电影| 色妞WWW精品免费视频| 美女裸体无遮挡免费视频网站| 亚洲第一黄片大全| 一级毛片不卡片免费观看| 亚洲高清有码中文字| 亚洲中文字幕无码专区| 9420免费高清在线视频| 人人狠狠综合久久亚洲| 亚洲av无码专区在线播放| 成年女人18级毛片毛片免费| 理论片在线观看免费| 亚洲一区二区三区高清| 四虎影院永久免费观看| 国产成人精品无码免费看 | 亚洲熟妇无码一区二区三区导航| 亚洲电影日韩精品| 亚洲一级毛片免费观看| 阿v免费在线观看| 亚洲第一成年人网站|