寫(xiě)程序,做產(chǎn)品,過(guò)日子

          成功其實(shí)很簡(jiǎn)單,就是強(qiáng)迫自己堅(jiān)持下去

          BlogJava 首頁(yè) 新隨筆 聯(lián)系 聚合 管理
            69 Posts :: 1 Stories :: 92 Comments :: 0 Trackbacks

          Spring 2.0無(wú)縫集成了Hibernate.提供了很多功能。但在我看來(lái),除了整合事務(wù)管理外,很多功能都 是可有可無(wú)的。

          最典型的就是HibernateTemplate,這個(gè)類(lèi)其實(shí)就是代理了Hibernate Session的所有功能。把我看得一愣一愣的。半天沒(méi)明白這個(gè)類(lèi)有什么奇妙用處。我用Hiberante API已經(jīng)輕車(chē)熟路,自然不愿再學(xué)習(xí)新的API。

          它引入這個(gè)HibernateTemplate有什么作用呢?其API也不比Hibernate的API簡(jiǎn)單啊。

          后來(lái)的測(cè)試表明Spring對(duì)Hibernate原生的API在事務(wù)支持上存在一些問(wèn)題,而用HibernateTemplate,事務(wù)就運(yùn)行得很好。

          Technorati : , ,

          posted on 2007-06-11 13:53 Welkin Hu 閱讀(5873) 評(píng)論(8)  編輯  收藏

          Feedback

          # re: 怪怪的Spring HibernateTemplate 2007-06-11 14:39 aninggo
          1.HibernateTemplate提供持久層訪問(wèn)模板化
          2.使用HibernateTemplate無(wú)須實(shí)現(xiàn)特定接口,它只需要提供一個(gè)SessionFactory的引用,利用aop注入到dao就可以實(shí)現(xiàn)對(duì)持久層的操作
          3.整合事物操作就已經(jīng)是它存在的最好的理由了,還想要什么?  回復(fù)  更多評(píng)論
            

          # re: 怪怪的Spring HibernateTemplate 2007-06-11 15:27 Welkin Hu
          @aninggo
          我想知道的是,和直接使用hiberate API相比,有什么好處?不用HiberateTemplate,同樣能整合事務(wù),而且一樣簡(jiǎn)單。  回復(fù)  更多評(píng)論
            

          # re: 怪怪的Spring HibernateTemplate 2007-06-11 15:41 aninggo
          @Welkin Hu
          雖然可以通過(guò)注入使用hibernate的原生API,但是還是有風(fēng)險(xiǎn)的,一旦該方法沒(méi)有被事務(wù)包裝起來(lái),那么session最后就沒(méi)有辦法被自動(dòng)關(guān)閉掉,這不像使用template,總可以被關(guān)閉掉,不管有沒(méi)有事務(wù)封裝。
          而且joson說(shuō)過(guò) ,template的主要目的是提供一個(gè)統(tǒng)一的持久層訪問(wèn)接口.用不用完全看個(gè)人喜好,學(xué)習(xí)這個(gè)api的曲線不會(huì)太陡峭吧:)  回復(fù)  更多評(píng)論
            

          # re: 怪怪的Spring HibernateTemplate 2007-06-11 16:06 Welkin Hu
          @aninggo
          這么說(shuō)主要好處是保證自動(dòng)關(guān)閉session。這個(gè)的確很有用。
          至于第二點(diǎn),Jason想到的是方便用戶(hù)從一種持久層技術(shù)切換到另一種。而在我們的產(chǎn)品中,持久層比較穩(wěn)定,反倒是Spring,有可能被換掉。出發(fā)點(diǎn)不一樣啊。  回復(fù)  更多評(píng)論
            

          # re: 怪怪的Spring HibernateTemplate 2007-06-11 17:33 aninggo
          @Welkin Hu
          并不是你沒(méi)有用它就沒(méi)有存在的必要,會(huì)有人用到的,spring不也給你了不同它的方法了么.  回復(fù)  更多評(píng)論
            

          # re: 怪怪的Spring HibernateTemplate[未登錄](méi) 2007-06-11 21:18 netfishx
          最大的作用應(yīng)該是切換持久層框架。比如說(shuō)最常見(jiàn)的同時(shí)用hibernate和原生jdbc,很多項(xiàng)目都會(huì)用到。  回復(fù)  更多評(píng)論
            

          # re: 怪怪的Spring HibernateTemplate 2007-06-12 09:07 Welkin Hu
          @netfishx
          應(yīng)當(dāng)有往這個(gè)方向努力的目的,但還達(dá)不到。原因很簡(jiǎn)單,各個(gè)持久層的查詢(xún)語(yǔ)言和模型不一致,比如HQO,SQL, JDOQL, JPQL, Criteria等等。Spring的Template雖然統(tǒng)一了API的方法名和參數(shù)個(gè)數(shù),但其接收的參數(shù)本身仍是分裂的。  回復(fù)  更多評(píng)論
            

          # re: 怪怪的Spring HibernateTemplate 2007-06-15 13:24 Welkin Hu
          今天被Spring的事務(wù)管理機(jī)制耍了,不得臨時(shí)用用HibernateTemplate。一用才發(fā)現(xiàn)簡(jiǎn)單的查詢(xún)被Spring搞復(fù)雜了,而且缺失了一些功能。
          1,不支持分頁(yè)。HibernateTemplate中有個(gè)fetch size,但沒(méi)有first result。
          2,傳入命名參數(shù)時(shí)不是一個(gè)map,而是一個(gè)名稱(chēng)數(shù)組和一個(gè)值數(shù)組。
          3,傳入?yún)?shù)為null時(shí)有異常。

          當(dāng)然,解決辦法很簡(jiǎn)單——寫(xiě)一個(gè)新類(lèi)擴(kuò)展HibernteTemplate。

          此外,Spring參數(shù)文檔中對(duì)HibernateTemplate的用法舉例也有問(wèn)題。在它的例子中,每個(gè)DAO類(lèi)都有一個(gè)HiberanteTemplate屬性,而不是每個(gè)DAO的方法自己創(chuàng)建一個(gè)新的HibernateTemplate實(shí)例。
          這種做法的主要問(wèn)題在于,HibernateTemplate中的一些設(shè)置,如fetch size, max results等,可能在調(diào)用者不知情的情況下,應(yīng)用到后續(xù)查詢(xún)中。

          我現(xiàn)在更愿意把HibernateTemplate理解成Spring集成Hibernate的一個(gè)sample。想用就用,想改就改。  回復(fù)  更多評(píng)論
            


          只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 岳普湖县| 黑龙江省| 同江市| 汾西县| 永济市| 谢通门县| 乐安县| 黄大仙区| 滨州市| 商丘市| 介休市| 杭州市| 军事| 安西县| 商南县| 稻城县| 商城县| 大石桥市| 屯留县| 玉龙| 南康市| 马边| 西峡县| 台中市| 合肥市| 万山特区| 江阴市| 滨州市| 叶城县| 浦东新区| 张家界市| 尉犁县| 吐鲁番市| 桐城市| 龙南县| 栖霞市| 凤台县| 仙居县| 鄂尔多斯市| 全南县| 长兴县|