<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ù)  更多評論
      
    主站蜘蛛池模板: a级毛片免费完整视频| 四虎在线成人免费网站| 午夜视频免费成人| 亚洲免费在线视频观看| 4399好看日本在线电影免费| 成年人视频在线观看免费 | 国产偷国产偷亚洲高清日韩 | 亚洲最新中文字幕| 最近2019免费中文字幕视频三| 日本不卡在线观看免费v| 亚洲日韩精品国产一区二区三区| 久爱免费观看在线网站| 午夜亚洲国产理论秋霞| 人人鲁免费播放视频人人香蕉| 一色屋成人免费精品网站| 久久精品国产亚洲AV网站| 免费无码午夜福利片69| 毛片高清视频在线看免费观看| 亚洲欧美日韩中文无线码| 四虎精品亚洲一区二区三区| 中文字幕无线码免费人妻| 亚洲天堂中文资源| 在线观看免费人成视频| 亚洲日产2021三区在线| 成年女人看片免费视频播放器| 色窝窝亚洲AV网在线观看| 亚洲乱码一区二区三区在线观看| 一区二区免费国产在线观看 | 免费视频淫片aa毛片| 人妖系列免费网站观看| 久久精品国产精品亚洲毛片| 精品少妇人妻AV免费久久洗澡| 人人爽人人爽人人片av免费| 337p日本欧洲亚洲大胆艺术| 久久精品成人免费观看| 亚洲一区二区三区久久| 亚洲精品视频免费| 999在线视频精品免费播放观看| 日韩成人精品日本亚洲| 亚洲a一级免费视频| 日韩中文无码有码免费视频|