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

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

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

    Goingmm

      BlogJava :: 首頁 :: 新隨筆 ::  :: 聚合  :: 管理 ::
      82 隨筆 :: 15 文章 :: 452 評論 :: 0 Trackbacks


    很不好意思,前三篇都還是概念。

    其一: 我想歸納下來,給自己以后看做一個備份
    其二: 現(xiàn)在真沒時間去寫代碼

    項目做完,回到成都,在后面的文章中,我會抽空寫一些實際的例子


    ---------------------------------------------------------------------------------------------------------------------
       概念Hibernate中的接口
    ---------------------------------------------------------------------------------------------------------------------

    大致分類:

         被用戶的應(yīng)用程序調(diào)用的,用來完成基本的創(chuàng)建、讀取、更新、刪除操作以及查詢操作的接口。這些接口是Hibernate實現(xiàn)用戶程序的商業(yè)邏輯的主要接口,它們包括SessionTransactionQuery

         Hibernate用來讀取諸如映射表這類配置文件的接口,典型的代表有Configuration

         回調(diào)(Callback)接口。它允許應(yīng)用程序能對一些事件的發(fā)生作出相應(yīng)的操作,例如InterceptorLifecycleValidatable都是這一類接口

         一些可以用來擴(kuò)展Hibernate的映射機(jī)制的接口,例如UserTypeCompositeUserTypeIdentifierGenerator。如果你確認(rèn)有必要的話這些接口可由用戶程序來實現(xiàn)。

     

    Session接口

           Session接口對于Hibernate開發(fā)人員來說是一個最重要的接口。然而在Hibernate中,實例化的Session是一個輕量級的類,創(chuàng)建和銷毀它都不會占用很多資源。這在實際項目中確實很重要,因為在客戶程序中,可能會不斷地創(chuàng)建以及銷毀Session對象,如果Session的開銷太大,會給系統(tǒng)帶來不良影響。但值得注意的是Session對象是非線程安全的,因此在你的設(shè)計中,最好是一個線程只創(chuàng)建一個Session對象。

           Hibernate的設(shè)計者將session看作介于數(shù)據(jù)連接與事務(wù)管理一種中間接口。我們可以將session想象成一個持久對象的緩沖區(qū),Hibernate能檢測到這些持久對象的改變,并及時刷新數(shù)據(jù)庫。我們有時也稱Session是一個持久層管理器,因為它包含這一些持久層相關(guān)的操作,諸如存儲持久對象至數(shù)據(jù)庫,以及從數(shù)據(jù)庫從獲得它們。請注意,Hibernate session不同于JSP應(yīng)用中的HttpSession。我們通常會將HttpSesion對象稱為用戶Session

     

    SessionFactory 接口

           他用到了一個設(shè)計模式[工廠模式],用戶程序從工廠類SessionFactory中取得Session的實例。

           但是請記住,SessionFactory并不是輕量級的!實際上它的設(shè)計者的意圖是讓它能在整個應(yīng)用中共享。典型地來說,一個項目通常只需要一個SessionFactory就夠了,但是當(dāng)你的項目要操作多個數(shù)據(jù)庫時,那你必須為每個數(shù)據(jù)庫指定一個SessionFactory

     

    Configuration 接口

           Configuration接口的作用是對Hibernate進(jìn)行配置,以及對它進(jìn)行啟動。在Hibernate的啟動過程中,Configuration類的實例首先定位映射文檔的位置,讀取這些配置,然后創(chuàng)建一個SessionFactory對象。

     

    Transaction 接口

           Transaction接口是一個可選的API,你可以選擇不使用這個接口,取而代之的是Hibernate的設(shè)計者自己寫的底層事務(wù)處理代碼。 Transaction接口是對實際事務(wù)實現(xiàn)的一個抽象,這些實現(xiàn)包括JDBC的事務(wù)、JTA中的UserTransaction、甚至可以是CORBA事務(wù)。
    為什么要這樣設(shè)計呢?因為這樣使開發(fā)者能夠使用一個統(tǒng)一事務(wù)的操作界面,使得自己的項目可以在不同的環(huán)境和容器之間方便地移值。

     

    QueryCriteria接口

           Query接口讓你方便地對數(shù)據(jù)庫及持久對象進(jìn)行查詢,它可以有兩種表達(dá)方式:HQL語言或本地數(shù)據(jù)庫的SQL語句。Query經(jīng)常被用來綁定查詢參數(shù)、限制查詢記錄數(shù)量,并最終執(zhí)行查詢操作

     

    Callback 接口

           當(dāng)一些有用的事件發(fā)生時。例如持久對象的載入、存儲、刪除時,Callback接口會通知Hibernate去接收一個通知消息。一般而言,Callback接口在用戶程序中并不是必須的,但你要在你的項目中創(chuàng)建審計日志時,你可能會用到它。


    2005年11月3日 夜  陰天 溫度偏低

    聽濤[601]室 窗臺

    posted on 2005-11-03 23:16 Goingmm 閱讀(726) 評論(21)  編輯  收藏 所屬分類: Reading Note

    評論

    # re: Cognize Hibernate ... Third 2005-11-04 00:07 google
    真不敢想象,如此的ORM框架,僅只有一位核心程序員(也不知道是真還是假).作為對JDBC的輕量級的對象封裝,hibernate確實有很多優(yōu)點(diǎn),這里相信大家都比我清楚,但是缺點(diǎn)也不是沒有,比如批量操作,我要指出一點(diǎn)點(diǎn)不足,hibernate的映射生成工具不是很好用(至少幾個月前是這樣, 不知道現(xiàn)在有不有成熟點(diǎn)的),不管是hibernate自帶的那個叫什么dll2hbm,還是xdoclet,或則eclipse插件形式的生成工具,都會根據(jù)不同的情況出現(xiàn)不同的問題,出現(xiàn)問題的唯一辦法就只有手工改配置文件.
      回復(fù)  更多評論
      

    # re: Cognize Hibernate ... Third 2005-11-04 09:51 這里的名字可以隨便寫
    回復(fù)人名字可以隨便寫,也可以冒充別人,所以沒有必要用真名字。

    為什么要用 Hibernate ?

    我只覺得增加了學(xué)習(xí)時間,等哪天我精通了 Hibernate ,Hibernate 又過時了。

      回復(fù)  更多評論
      

    # re: Cognize Hibernate ... Third 2005-11-04 09:53 隨便寫
    Hibernate 比 CMP 好在哪里?  回復(fù)  更多評論
      

    # re: Cognize Hibernate ... Third 2005-11-04 10:03 沒的名字的
    對頭,先想為什么要用,再講如何用。  回復(fù)  更多評論
      

    # re: Cognize Hibernate ... Third 2005-11-04 10:13 Water Ye@ITO
    crud還是很有用的

    但對hql還不是很滿意

    hbm和pojo最好手工改, 自動化工具無法勝任, 特別是已經(jīng)在運(yùn)行的項目  回復(fù)  更多評論
      

    # re: Cognize Hibernate ... Third 2005-11-04 12:16 還是沒的名字的
    Re:
    2005-11-04 10:13 | Water Ye@ITO
    hbm和pojo最好手工改, 自動化工具無法勝任, 特別是已經(jīng)在運(yùn)行的項目


    手工改容易弄出很多新Bug出來,特別是已經(jīng)在運(yùn)行項目。
    如果已經(jīng)使用了EJB,只是用Hibernate來做持久層,最后還是需要在容器內(nèi)測試,享受不到輕量級系統(tǒng)的好處。
      回復(fù)  更多評論
      

    # re: Cognize Hibernate ... Third 2005-11-04 12:43 赤露的羔羊
    都裸起,我也裸露一盤,goingmm不介意吧?
    轉(zhuǎn)摘一篇《Hibernate的優(yōu)點(diǎn) 》:

    一、Hibernate是JDBC的輕量級的對象封裝,它是一個獨(dú)立的對象持久層框架,和App Server,和EJB沒有什么必然的聯(lián)系。Hibernate可以用在任何JDBC可以使用的場合,例如Java應(yīng)用程序的數(shù)據(jù)庫訪問代碼,DAO接口的實現(xiàn)類,甚至可以是BMP里面的訪問數(shù)據(jù)庫的代碼。從這個意義上來說,Hibernate和EB不是一個范疇的東西,也不存在非此即彼的關(guān)系。

    二、Hibernate是一個和JDBC密切關(guān)聯(lián)的框架,所以Hibernate的兼容性和JDBC驅(qū)動,和數(shù)據(jù)庫都有一定的關(guān)系,但是和使用它的Java程序,和App Server沒有任何關(guān)系,也不存在兼容性問題。

    三、Hibernate不能用來直接和Entity Bean做對比,只有放在整個J2EE項目的框架中才能比較。并且即使是放在軟件整體框架中來看,Hibernate也是做為JDBC的替代者出現(xiàn)的,而不是Entity Bean的替代者出現(xiàn)的,讓我再列一次我已經(jīng)列n次的框架結(jié)構(gòu):

    傳統(tǒng)的架構(gòu):
    1) Session Bean <-> Entity Bean <-> DB
    為了解決性能障礙的替代架構(gòu):
    2) Session Bean <-> DAO <-> JDBC <-> DB
    使用Hibernate來提高上面架構(gòu)的開發(fā)效率的架構(gòu):
    3) Session Bean <-> DAO <-> Hibernate <-> DB

    就上面3個架構(gòu)來分析:
    1、內(nèi)存消耗:采用JDBC的架構(gòu)2無疑是最省內(nèi)存的,Hibernate的架構(gòu)3次之,EB的架構(gòu)1最差。

    2、運(yùn)行效率:如果JDBC的代碼寫的非常優(yōu)化,那么JDBC架構(gòu)運(yùn)行效率最高,但是實際項目中,這一點(diǎn)幾乎做不到,這需要程序員非常精通JDBC,運(yùn)用Batch語句,調(diào)整PreapredStatement的Batch Size和Fetch Size等參數(shù),以及在必要的情況下采用結(jié)果集cache等等。而一般情況下程序員是做不到這一點(diǎn)的。因此Hibernate架構(gòu)表現(xiàn)出最快的運(yùn)行效率。EB的架構(gòu)效率會差的很遠(yuǎn)。

    3、開發(fā)效率:在有JBuilder的支持下以及簡單的項目,EB架構(gòu)開發(fā)效率最高,JDBC次之,Hibernate最差。但是在大的項目,特別是持久層關(guān)系映射很復(fù)雜的情況下,Hibernate效率高的驚人,JDBC次之,而EB架構(gòu)很可能會失敗。

    4、分布式,安全檢查,集群,負(fù)載均衡的支持
    由于有SB做為Facade,3個架構(gòu)沒有區(qū)別。

    四、EB和Hibernate學(xué)習(xí)難度在哪里?

    EB的難度在哪里?不在復(fù)雜的XML配置文件上,而在于EB運(yùn)用稍微不慎,就有嚴(yán)重的性能障礙。所以難在你需要學(xué)習(xí)很多EJB設(shè)計模式來避開性能問題,需要學(xué)習(xí)App Server和EB的配置來優(yōu)化EB的運(yùn)行效率。做EB的開發(fā)工作,程序員的大部分精力都被放到了EB的性能問題上了,反而沒有更多的精力關(guān)注本身就主要投入精力去考慮的對象持久層的設(shè)計上來。

    Hibernate難在哪里?不在Hibernate本身的復(fù)雜,實際上Hibernate非常的簡單,難在Hibernate太靈活了。

    當(dāng)你用EB來實現(xiàn)持久層的時候,你會發(fā)現(xiàn)EB實在是太笨拙了,笨拙到你根本沒有什么可以選擇的余地,所以你根本就不用花費(fèi)精力去設(shè)計方案,去平衡方案的好壞,去費(fèi)腦筋考慮選擇哪個方案,因為只有唯一的方案擺在你面前,你只能這么做,沒得選擇。

    Hibernate相反,它太靈活了,相同的問題,你至少可以設(shè)計出十幾種方案來解決,所以特別的犯難,究竟用這個,還是用那個呢?這些方案之間到底有什么區(qū)別呢?他們的運(yùn)行原理有什么不同?運(yùn)行效率哪個比較好?光是主鍵生成,就有七八種方案供你選擇,你為難不為難?集合屬性可以用Set,可以用List,還可以用Bag,到底哪個效率高,你為難不為難?查詢可以用iterator,可以用list,哪個好,有什么區(qū)別?你為難不為難?復(fù)合主鍵你可以直接在hbm里面配置,也可以自定義CustomerType,哪種比較好些?你為難不為難?對于一個表,你可以選擇單一映射一個對象,也可以映射成父子對象,還可以映射成兩個1:1的對象,在什么情況下用哪種方案比較好,你為難不為難?

    這個列表可以一直開列下去,直到你不想再看下去為止。當(dāng)你面前擺著無數(shù)的眼花繚亂的方案的時候,你會覺得幸福呢?還是悲哀呢?如果你是一個負(fù)責(zé)的程序員,那么你一定會仔細(xì)研究每種方案的區(qū)別,每種方案的效率,每種方案的適用場合,你會覺得你已經(jīng)陷入進(jìn)去拔不出來了。如果是用EB,你第一秒種就已經(jīng)做出了決定,根本沒得選擇,比如說集合屬性,你只能用Collection,如果是Hibernate,你會在Bag,List和Set之間來回猶豫不決,甚至搞不清楚的話,程序都沒有辦法寫。


      回復(fù)  更多評論
      

    # re: Cognize Hibernate ... Third 2005-11-04 12:59 todogoingmm
    “還是沒的名字的”? 建議樓上的兄弟還是留下一個別名吧!!
    Re: 為什么要用Hibernate ? 我只覺得增加了學(xué)習(xí)時間,等哪天我精通了 Hibernate ,Hibernate 又過時了。
    個人想法:學(xué)習(xí)是看自己的興趣了,如果對這個感興趣才會去學(xué)習(xí)。我不建議完全沒有興趣,純粹為了做項目去學(xué)習(xí)。這樣效果也不會很好。在這里,我不愿意去做一個技術(shù)的布道者。只希望盡量能在使用以后,用平常心去討論

    Re:Hibernate 比 CMP 好在哪里?
    這個問題我也沒有深入的去研究過。列出幾個供大家參考吧!
    1) CMP要求所有的訪問操作都在事務(wù)環(huán)境中,非事務(wù)方式的訪問不受支持。提出了一個全新的事務(wù)模型(method-based descriptor)。hibernate沒有試圖創(chuàng)造一個更新的模式,相反,Hibernate沿用了傳統(tǒng)數(shù)據(jù)庫的Transaction編程模式。
    2) 繼承是對真實對象建模時常用的概念,但CMP并不支持它。CMP在組件的定義和實現(xiàn)時并不一致,在具體實現(xiàn)一個EntityBean接口時,實現(xiàn)的類可以具有繼承關(guān)系,但在定義這個EntityBean時卻不行。類之間的關(guān)系也只是在接口之間,而不是在實現(xiàn)類之間,因此這些關(guān)系也不存在多態(tài)性
    3) CMP雖然也有Local接口,但是Web層還是需要通過Remote接口訪問EJB層的數(shù)據(jù),序列化、網(wǎng)絡(luò)調(diào)用、創(chuàng)建大量的對象,都是性能降低的原因
    4) CMP很難實現(xiàn)動態(tài)Query,這是因為它基于代碼自動生成技術(shù),即最終的執(zhí)行代碼是在部署編譯時生成的。hibernate則有根本的改變,它基于reflection機(jī)制,運(yùn)行時動態(tài)Query是很自然的事。另外,hibernate幾乎支持所有的SQL語法。

      回復(fù)  更多評論
      

    # re: Cognize Hibernate ... Third 2005-11-04 15:06 沒的名字的
    我的名字就先叫“沒的名字的”

    我贊成用hibernate不用復(fù)雜的JDBC的方法(雖然我用JDBC比用hibernate要快,我就是上次參加那個不準(zhǔn)說名字的項目用了一下hibernate,現(xiàn)在都忘記了)。

    關(guān)于性能問題:
    用CMP的時候,只是做查詢慢。
    但是可以用JDBC來做查詢啊。用JDBC只做查詢應(yīng)該不復(fù)雜吧?沒有必要用hibernate了。
    還有就是使用SessionFacade做門面,CMP根本不需要遠(yuǎn)程接口。
    EJB2.1規(guī)范允許把無狀態(tài)的Session Bean弄成WebService,既然要效率,還做什么WebService? 傳輸XML是比較慢的。

    不知道什么時候計算機(jī)的性能會才會因為達(dá)到了物理極限而不能再提高了,也許到了那個時候又有新技術(shù)變?yōu)楝F(xiàn)實了,比如量子計算機(jī)。  回復(fù)  更多評論
      

    # re: Cognize Hibernate ... Third 2005-11-04 15:13 沒的名字的
    用JDBC做查詢有個缺點(diǎn),就是程序員可能會忘記關(guān)閉打開的數(shù)據(jù)庫連接。

    在開發(fā)程序的時候,可以在AppServer里設(shè)置連接池的最大連接數(shù)為1,強(qiáng)迫程序記住關(guān)閉連接,不然查了一次就不能查第二次了。  回復(fù)  更多評論
      

    # re: Cognize Hibernate ... Third 2005-11-04 15:21 沒的名字的
    上面是“強(qiáng)迫程序員記住關(guān)閉連接”,是程序員不是程序,少打了一個字。  回復(fù)  更多評論
      

    # re: Cognize Hibernate ... Third 2005-11-04 15:41 沒的名字的
    上面的上面的上面我說“用CMP的時候,只是做查詢慢”。
    現(xiàn)在要更正一下,是“做查詢返回大量結(jié)果的時候慢”。

    還有就是用CMP做查詢返回大量結(jié)果的時候,只能返回Collection的問題。用JDBC也能返回其它類型,比hibernate還要靈活。


      回復(fù)  更多評論
      

    # re: Cognize Hibernate ... Third 2005-11-04 16:17 todogoingmm
    呵呵~~ 匯編也很好,但是不見得有很多人用

    不否認(rèn)JDBC的優(yōu)點(diǎn)。但是眼下J2EE項目開發(fā),我們現(xiàn)在的選擇還會是JDBC嗎?  回復(fù)  更多評論
      

    # re: Cognize Hibernate ... Third 2005-11-04 17:28 沒的名字的
    我是說如果只做查詢的話,可以用JDBC,沒有必要用hibernate了。

    用hibernate會更麻煩。


    用JDBC只是用來解決CMP的致命問題。


    具體就是做只讀的DAO,用Session Bean來調(diào)用DAO。  回復(fù)  更多評論
      

    # re: Cognize Hibernate ... Third 2005-11-04 17:35 todogoingmm
    Hibernate的查詢SQL經(jīng)過優(yōu)化處理。估計用JDBC沒有點(diǎn)功力的也寫不出來。還有他可以減少很多無謂的數(shù)據(jù)庫交互。他能緩存下查詢的記錄。各種方式支持你自由配置。當(dāng)然你也可以自己去實現(xiàn)這些功能。但這基本上是沒有必要的

    我們還是不要再無謂的爭論這個拉,我發(fā)覺這里離題已經(jīng)越來越遠(yuǎn)了。呵呵!  回復(fù)  更多評論
      

    # re: Cognize Hibernate ... Third 2005-11-04 17:41 沒的名字的
    我知道你們現(xiàn)在一起住的三個人有兩個都參加過上次那個不準(zhǔn)說項目的真名字的那個用 Session Bean + hibernate 的項目。

    我更喜歡用CMP,雖然我沒有在大項目中實踐過。

    你慢慢猜我是哪個哈。  回復(fù)  更多評論
      

    # re: Cognize Hibernate ... Third 2005-11-04 19:25 todogoingmm
    1) 知道我們現(xiàn)在在北京住一起的三個人,肯定是一個比較樂觀開朗的人,關(guān)心時事
    2) 知道我們參與過并不能說出項目真實名字,那么一定是中國人,而且參加過這個項目
    3) 你的刷新頻率這么快,而且出沒這么孤獨(dú)。現(xiàn)在一定不在CTU-SDC,并且新加坡Office不能打開我的這個blog。
    4) 有連續(xù)三次回帖補(bǔ)充的記錄。你的年齡不會超過25歲
    我還是記不起來。記得上一次聽人說喜歡CMP還是去年,一個很牛B的架構(gòu)師[name is secret]。All men like CMP he saied 。可能碰巧給你聽見了,呵呵!~~~愿意的話,就把你的名字告訴大家吧,我們不要再浪費(fèi)blogjava的硬盤空間了。本來就很珍貴的。  回復(fù)  更多評論
      

    # re: Cognize Hibernate ... Third 2005-11-04 21:09 google
    goingmm,你在搞偵察所,“天黑請閉眼……”  回復(fù)  更多評論
      

    # re: Cognize Hibernate ... Third 2005-11-04 21:27 沒的名字的
    看見你在那里亂分析我是誰,我回家了都忍不住要回復(fù)你。

    我就是那個平時喜歡一個人玩,被報表項目浪費(fèi)了一大半青春的6山酒林。

    我忘記了Hibernate,還沒學(xué)會SQL Map,連iHis我也快忘完了。  回復(fù)  更多評論
      

    # re: Cognize Hibernate ... Third 2005-11-04 21:38 google
    6山酒林是啥子喲?  回復(fù)  更多評論
      

    # re: Cognize Hibernate ... Third 2005-11-04 21:44 柔情四火
    真是的,測試一哈  回復(fù)  更多評論
      

    主站蜘蛛池模板: 亚洲免费福利在线视频| 亚洲AV永久无码精品成人| 精品无码国产污污污免费网站| 朝桐光亚洲专区在线中文字幕| 亚洲欧洲另类春色校园小说| 亚洲精品一品区二品区三品区| 国产一级高清免费观看| 丁香花免费完整高清观看| 无码人妻丰满熟妇区免费| 热久久这里是精品6免费观看| 男男黄GAY片免费网站WWW| 亚洲色大网站WWW永久网站| 亚洲国产模特在线播放| 亚洲图片在线观看| 夜夜亚洲天天久久| 无码欧精品亚洲日韩一区| 国产精品亚洲成在人线| 亚洲中文字幕无码专区| 一区二区三区亚洲视频| 国产一区二区三区在线免费观看| 国内精品免费视频自在线| 成全影视免费观看大全二| 黄瓜视频高清在线看免费下载| 91嫩草国产在线观看免费| 免费不卡视频一卡二卡| 久久久久国色AV免费观看性色| 欧美三级在线电影免费| 日韩毛片免费无码无毒视频观看 | 免费一级一片一毛片| 四虎影视免费在线| 成人免费看吃奶视频网站| 无码视频免费一区二三区| 午夜精品在线免费观看| 日韩激情淫片免费看| 日韩一区二区免费视频| 国产jizzjizz视频免费看| 国产免费人视频在线观看免费| 国产一级淫片免费播放| 亚洲免费无码在线| 精品亚洲综合久久中文字幕| 亚洲av日韩av无码黑人|