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

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

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

    幫助IT團(tuán)隊(duì)快速構(gòu)建符合jt808協(xié)議部標(biāo)的基于java技術(shù)的GPS和視頻平臺(tái)(2379423771@qq.com)

    Ibatis VS Hibernate

       近日,在JavaEye論壇中,看了Ibatis和Hibernate的帖子,看后,心里覺(jué)得的憋悶,不說(shuō)不快, 這里,我想更細(xì)化一下:

        1. 庫(kù)表的復(fù)雜度,首先取決于需求,不取決于設(shè)計(jì),設(shè)計(jì)能力強(qiáng)的人,也要遵守庫(kù)表設(shè)計(jì)的規(guī)范,從巴克斯三個(gè)范式上,原則上也要遵守。不能說(shuō)用了Hibernate,自己的庫(kù)表設(shè)計(jì)能力就強(qiáng)了。不能為了用Hibernate,就去一味批判復(fù)雜的關(guān)系不對(duì)。復(fù)雜的關(guān)系設(shè)計(jì)對(duì)不對(duì),首先取決于是否有復(fù)雜的需求,其次才取決于設(shè)計(jì)者的能力。

        2. 只要你用的是關(guān)系數(shù)據(jù)庫(kù),就必須要明白,為什么叫關(guān)系數(shù)據(jù)庫(kù),而不叫面向?qū)ο髷?shù)據(jù)庫(kù),把面向?qū)ο蟮哪切┯^點(diǎn),拿到庫(kù)表設(shè)計(jì)上,后期維護(hù)和調(diào)優(yōu)上,你要擔(dān)起責(zé)任,不能讓開發(fā)人員替早期決策人員擦屁股。我見過(guò)有的人,打著OO和擴(kuò)展性的旗號(hào),硬生生的把一個(gè)表,拆成了三個(gè)表,而這三個(gè)表,本來(lái),只需要增加一個(gè)類型字段,再做一些冗余,就可以是一個(gè)表。現(xiàn)在查詢時(shí),還要把這三個(gè)表Union到一塊來(lái)查。當(dāng)需求變更時(shí),增加一個(gè)字段,不僅要改變?nèi)齻€(gè)類,還要改變?nèi)齻€(gè)表,簡(jiǎn)直是亂倫。

        3.One-One的庫(kù)表設(shè)計(jì),對(duì)于DBA來(lái)講,并不是一個(gè)best practice的設(shè)計(jì)。不能為了Hibernate,刻意把大表拆成小表,再用幾個(gè)小類,做成One-One的映射關(guān)系。整體性,是不能隨便的分割,畢竟開發(fā)人在調(diào)試、測(cè)試和維護(hù)的時(shí)候,更喜歡看數(shù)據(jù)庫(kù)里的數(shù)據(jù),本來(lái)一個(gè)SQL,就查出來(lái),現(xiàn)在要到多個(gè)表中去查。

        4. 增刪改存的實(shí)體維護(hù)
           Ibatis比不上Hibernate,說(shuō)實(shí)在話,現(xiàn)在讓我寫SQL來(lái)維護(hù)一個(gè)多對(duì)多關(guān)系的實(shí)體維護(hù),我都要考慮上半天,別說(shuō)寫代碼了。

        5. 你需要寫原生SQL嗎
           首先你要確認(rèn),你項(xiàng)目的要求不需要寫原生SQL,再來(lái)講Ibatis和Hibernate的好壞,在寫原生SQL上,特別是動(dòng)態(tài)生成的SQL,ibatis比Hiberante有得一拼,ibatis就像一個(gè)模板一樣,將SQL寫在配置文件當(dāng)中,集中配置,特別方便技術(shù)領(lǐng)導(dǎo)者監(jiān)控項(xiàng)目成員寫的SQL好壞,而且沒(méi)有什么學(xué)習(xí)曲線,就寫SQL就完事了。

           有人會(huì)說(shuō),Hibernate也支持寫SQL,但是寫代碼當(dāng)中,就失去了原來(lái)基于Hibernate的DAO的簡(jiǎn)潔性。那個(gè)DAO一點(diǎn)也不簡(jiǎn)潔,如果你將動(dòng)態(tài)拼SQL的代碼也放在DAO當(dāng)中,那個(gè)DAO就會(huì)充斥大量的If 。。Else。。之類的語(yǔ)句,一坨一坨的,非常的壯觀。

           還有人會(huì)說(shuō),Hibernate也支持命名查詢,將SQL寫在映射文件當(dāng)中,但是命名查詢,只支持占位符固定的情況,也就是說(shuō),where a = ? and b = ? and c=?,是三個(gè)問(wèn)號(hào),就是三個(gè)問(wèn)號(hào),傳參時(shí),少一個(gè)都不行。但是很多項(xiàng)目的查詢,都是動(dòng)態(tài)的,也就是說(shuō)用戶選了這個(gè)查詢條件,才會(huì)生成這個(gè)占位符的。

           Hibernate辦不到。


           還有人會(huì)說(shuō),我自己用Hibernate寫一個(gè)框架,也可以做到,那你寫的可能比Ibatis好,也可能差,你要造輪子,誰(shuí)來(lái)攔不著。
      

        5. 調(diào)優(yōu)
           早期調(diào)優(yōu),有些Bad SQL,其實(shí)在code review階段,只要看看Ibatis的SQL配置文件,就可以扼殺掉的,如果使用HSQL,可能不會(huì)被發(fā)現(xiàn),因?yàn)樗粌H隱藏在代碼當(dāng)中,有的時(shí)候,還需要程序跑起來(lái),通過(guò)日志打印出SQL或者通過(guò)其它工具如P6Spy來(lái)看的出來(lái)。

           后期調(diào)優(yōu),既然是調(diào)優(yōu),我想就一定是遇到了瓶頸,可能要在庫(kù)表上做冗余,可能要檢查那些Bad SQL,可能要修改代碼,可能要?jiǎng)佑肈BA層次上的一些調(diào)優(yōu)手段,那么調(diào)優(yōu)越深入,Ibatis的優(yōu)勢(shì)就越能體現(xiàn)出來(lái),比如說(shuō)增加臨時(shí)表,中間表,增加冗余字段等。

        6. 開發(fā)速度
          
           如果項(xiàng)目當(dāng)中,沒(méi)有一個(gè)Hibernate高手,你的項(xiàng)目又相對(duì)的復(fù)雜,不僅有復(fù)雜的庫(kù)表關(guān)系,還有大量的報(bào)表查詢,那么使用Hibernate,速度上遜于Ibatis.

           問(wèn)題在于,怎么樣算是一個(gè)Hibernate高手,別看論壇上,那么多人,群情激奮的在說(shuō)Hibernate的好,有誰(shuí)真的是高手?

           我認(rèn)識(shí)一個(gè)人,連Hibernate的命名查詢、悲觀鎖、樂(lè)觀鎖之類的,都不清楚,還在那說(shuō):“說(shuō)Hibernate不好的人,只是他不會(huì)用Hibernate,高手使用EJB也一樣用的很順溜“,我這輩子,最最討厭的就的這樣的人,人家明明用Spring很簡(jiǎn)單,很快樂(lè),為什么要用EJB,充高手。換過(guò)來(lái),項(xiàng)目使用Ibatis來(lái)做動(dòng)態(tài)查詢,很快的就解決問(wèn)題了,為什么要去學(xué)Hibernate里面高深的東東,是不是這樣就是高手了?

        7. 平臺(tái)移植性
           如果你的項(xiàng)目要做產(chǎn)品,而且打算基于多個(gè)數(shù)據(jù)庫(kù)平臺(tái)的發(fā)布,使用Hiberante是沒(méi)有說(shuō)了。

        8. 維護(hù)性
           如果不考慮移植性,Ibatis的可維護(hù)不差于Hibernate,庫(kù)表變動(dòng)引起實(shí)體類變動(dòng)時(shí),HSQL也會(huì)有改動(dòng),有人說(shuō)不用改,說(shuō)這話的那個(gè)人可能整天只會(huì)有select * ,如果ibatis也是這樣寫,也不用動(dòng)了。

           HSQL好閱讀嗎,F(xiàn)rom order,確實(shí)很簡(jiǎn)單,但實(shí)際當(dāng)中,這跟拿HelloWord做例子,有什么區(qū)別?

         
       
        9. 我在實(shí)際項(xiàng)目當(dāng)中的運(yùn)用
        項(xiàng)目背景:
           我自己從Hibernate2開始使用,我現(xiàn)在也不認(rèn)為我是Hibernate高手,我也沒(méi)有時(shí)間去鉆研Hibernate,更深的東西,我也不喜歡坐在開發(fā)人員旁邊老半天,去幫他們解決Hibernate遇到的問(wèn)題,因?yàn)槲易约哼€有很多事要做。

           我的項(xiàng)目當(dāng)中,在Hibernate方面,還有一個(gè)比我更強(qiáng)的人,他也很煩去看Hibernate打印出來(lái)的sql,看上老半天,再調(diào)上老半天,項(xiàng)目進(jìn)度,嗖嗖的過(guò)去了。

           水平越高的人,任務(wù)越重,很少有時(shí)間和耐心去解決一般性的問(wèn)題。

        最終的運(yùn)用:

           在基于Spring的容器事務(wù)管理之下,
           增、刪、改、存及在事務(wù)中的查詢,使用Hibernate。
           非事務(wù)性的查詢及報(bào)表,都用Ibatis,維護(hù)非常的直觀方便,開發(fā)速度上也快很多。

           我覺(jué)得現(xiàn)在技術(shù)換代很快,使用一項(xiàng)技術(shù),首先是要快速的解決問(wèn)題,然后要學(xué)習(xí)他的思想,那些整天死抱著Hibernate,自認(rèn)為學(xué)習(xí)到ORM的設(shè)計(jì)技巧的人,就去繼續(xù)的學(xué)吧。

           我已經(jīng)會(huì)用Hibernate的一些方面,我覺(jué)得夠用就行了,犯不上,天天鉆研HSQL,如果有時(shí)間,我覺(jué)得躺在草坪上看看Unix的編程藝術(shù),看看代碼大全,看看Oracle的編程藝術(shù),比看Hibernate的SB書要愜意多了。

           簡(jiǎn)單能夠帶來(lái)快樂(lè),用過(guò)EJB,再用Spring的人,都有體會(huì),那簡(jiǎn)直是一種思想上的重生。


           Ibatis的設(shè)計(jì)者認(rèn)為,在新的項(xiàng)目當(dāng)中,可以使用Hibernate,在舊的遺留項(xiàng)目當(dāng)中,可以使用Ibatis,不明白,他為什么說(shuō)這樣的話,這與新舊項(xiàng)目有什么區(qū)別? 新的項(xiàng)目就真的可以使用Hibernate嗎。

     

     

      

     

     


     

    posted on 2007-05-05 18:14 Speed 閱讀(5405) 評(píng)論(19)  編輯  收藏 所屬分類: 框架設(shè)計(jì)J2EEHibernate & Ibatis

    評(píng)論

    # re: 不做技術(shù)的奴隸 2007-05-05 22:05 Welkin Hu

    (
    最終的運(yùn)用:

    在基于Spring的容器事務(wù)管理之下,
    增、刪、改、存及在事務(wù)中的查詢,使用Hibernate。
    非事務(wù)性的查詢及報(bào)表,都用Ibatis,維護(hù)非常的直觀方便,開發(fā)速度上也快很多。
    )

    按樓主的這個(gè)做法,豈不是要同時(shí)掌握Hibernate和iBatis兩門技術(shù)?同時(shí)為一個(gè)表寫hibernate mapping和ibatis sql? 這本身已經(jīng)有很大的重復(fù)量了呢。

      回復(fù)  更多評(píng)論   

    # re: 不做技術(shù)的奴隸 2007-05-06 01:14 bigbigbig

    兄弟說(shuō)得相當(dāng)精彩!!!!!!

    尤其是第二條,我深有體會(huì)!!!!!!!!

    支持!  回復(fù)  更多評(píng)論   

    # re: 不做技術(shù)的奴隸 2007-05-06 09:19 山風(fēng)小子

    平衡唯美~  回復(fù)  更多評(píng)論   

    # re: 不做技術(shù)的奴隸 2007-05-06 09:49 OneEyeWolf

    @Welkin Hu
    你可以不用ibatis,你可以用Hibernate來(lái)寫SQL,這沒(méi)有關(guān)系。

    我喜歡和有實(shí)踐的人爭(zhēng)論。

      回復(fù)  更多評(píng)論   

    # re: 不做技術(shù)的奴隸 2007-05-06 11:33 Welkin Hu

    是啊,我們現(xiàn)在的做法就是在Hibernate中寫HQL和SQL,沒(méi)有用iBatis。不過(guò)樓主的最佳實(shí)踐中講到“非事務(wù)性的查詢及報(bào)表,都用Ibatis”。我有些納悶:在已經(jīng)使用了Hibernate的前提下,直接在Hibernate中寫SQL,和在iBatis配置SQL,哪個(gè)更好呢?  回復(fù)  更多評(píng)論   

    # re: 不做技術(shù)的奴隸 2007-05-06 11:44 OneEyeWolf

    兩者結(jié)合,只是表明一種觀點(diǎn),技術(shù)是相宜互補(bǔ)的,用來(lái)解決問(wèn)題的。

    也是我的項(xiàng)目當(dāng)中的實(shí)踐,對(duì)于其它人和項(xiàng)目,是否適合,不得而知。

    所以不能叫best practice.

    我想,好處是自己動(dòng)手實(shí)踐而來(lái),自己找一個(gè)例子,做一下,比如動(dòng)態(tài)拼SQL,寫一個(gè)Hibernate,再寫一個(gè)ibatis,比較一下,就知道了。

    空對(duì)空的討論,只能激起矛盾,沒(méi)有任何意義。

      回復(fù)  更多評(píng)論   

    # re: 不做技術(shù)的奴隸 2007-05-06 14:46 leekiang

    我認(rèn)識(shí)的人里面壓根就沒(méi)有人懂悲觀鎖、樂(lè)觀鎖、事務(wù)、命名查詢、緩存等,有人只會(huì)照著寫select、insert、update、delete,還說(shuō)他懂hibernate。我不知道這樣做出來(lái)的項(xiàng)目能不能用。  回復(fù)  更多評(píng)論   

    # re: 不做技術(shù)的奴隸 2007-05-06 18:29 yeshucheng

    呵呵,很同意樓主的觀點(diǎn)。
    做了快5年的項(xiàng)目下來(lái),真的是很有體會(huì)!
    記得以前我和一個(gè)朋友討論過(guò):某些程度的東西不要一味的為了Hibernate而Hibernate,這個(gè)就是最可悲的事。在一個(gè)項(xiàng)目很緊張的時(shí)候,客戶和老板容不得你去過(guò)去思考使用什么技術(shù),他們的觀點(diǎn)一直就是:我能看到你的實(shí)現(xiàn)就可以!
    大家不要否認(rèn)這個(gè)現(xiàn)狀,這個(gè)也是中國(guó)目前的狀況。有時(shí)候同事和我說(shuō):我能否使用JDBC完成這個(gè)(這個(gè)業(yè)務(wù)要使用到6張表)。我的態(tài)度是:完全可以。如果使用Hibernate去做,大家想象一下會(huì)怎么樣。
      回復(fù)  更多評(píng)論   

    # re: 不做技術(shù)的奴隸 2007-05-06 18:30 yeshucheng

    不過(guò)我覺(jué)得在以前很多朋友使用過(guò)很多SQL寫過(guò)很多報(bào)表的朋友,寫JDBC或者IBatis這些東西來(lái)做完全得心應(yīng)手!既然人家寫這個(gè)能夠體現(xiàn)一個(gè)同樣的思想表達(dá)何必再去強(qiáng)求呢?呵呵
    一般CRUD這些東西完全可以使用Hibernate去做。但是如果真的牽涉到很強(qiáng)硬的readonly的業(yè)務(wù)查詢沒(méi)有必要去專牛角尖,使用諸如JDBC或者IBatis完全可以,只要實(shí)現(xiàn)得體,完全沒(méi)有問(wèn)題!  回復(fù)  更多評(píng)論   

    # re: 不做技術(shù)的奴隸 2007-05-07 09:38 Welkin Hu

    沒(méi)用過(guò)iBatis,所以不知道它對(duì)于動(dòng)態(tài)SQL有多好。反正,基于不愿意為一個(gè)表做兩套O/R Mapping和儲(chǔ)備兩種技術(shù)的目的,我沒(méi)有在產(chǎn)品中引入iBatis。  回復(fù)  更多評(píng)論   

    # re: 不做技術(shù)的奴隸[未登錄](méi) 2007-05-07 20:19 javacap

    我干脆就兩者都不用,自己簡(jiǎn)單封裝一下(不要說(shuō)什么重復(fù)發(fā)明輪子,每個(gè)人 都有 適合自己的項(xiàng)目的輪子).做得更漂亮。  回復(fù)  更多評(píng)論   

    # re: 不做技術(shù)的奴隸 2007-05-08 09:29 Juliashine

    我見過(guò)有的人,打著OO和擴(kuò)展性的旗號(hào),硬生生的把一個(gè)表,拆成了三個(gè)表,而這三個(gè)表,本來(lái),只需要增加一個(gè)類型字段,再做一些冗余,就可以是一個(gè)表。現(xiàn)在查詢時(shí),還要把這三個(gè)表Union到一塊來(lái)查。當(dāng)需求變更時(shí),增加一個(gè)字段,不僅要改變?nèi)齻€(gè)類,還要改變?nèi)齻€(gè)表,簡(jiǎn)直是亂倫。

    -----------------------------------------------------------------

    這一段怎么好像是說(shuō)我們公司一樣  回復(fù)  更多評(píng)論   

    # re: 不做技術(shù)的奴隸 2007-05-14 08:59 Welkin Hu

    @Juliashine
    嘻嘻,不管什么O/R Mapping工具,好像都沒(méi)有提倡OO式的表結(jié)構(gòu)喲。O/R mapping這個(gè)名字中,R可是三分天下有其一的。如果真的想玩OO式的表,那就玩面向?qū)ο髷?shù)據(jù)庫(kù)得了。連O/R mapping都省了。
      回復(fù)  更多評(píng)論   

    # re: Ibatis VS Hibernate 2008-07-17 08:54 lan

    我不用Hibernate就是特?zé)┠承┤四肙O的思想往關(guān)系數(shù)據(jù)庫(kù)上套,這種改變數(shù)據(jù)庫(kù)中心思想的行為,實(shí)在是太...

    我周圍支持Hibernate的人大都是些新手,因?yàn)橛眠@個(gè)可以省下很多思考,也就是偷懶,他們平常作的都是簡(jiǎn)單的CRUD,能寫復(fù)雜SQL的幾乎沒(méi)有。

    對(duì)于那些動(dòng)輒就寫數(shù)十行甚至上百行SQL的業(yè)務(wù)應(yīng)用以及為了性能反復(fù)調(diào)優(yōu)的人來(lái)說(shuō),和沒(méi)有這種經(jīng)歷的人去討論IBATIS和Hibernate就如同對(duì)牛彈琴。

    我曾遇到這么一個(gè)人,先學(xué)一樣?xùn)|西時(shí),有了解后就大呼不錯(cuò),很好,很棒,有了它天下大可以去了,改天又學(xué)了一樣,發(fā)現(xiàn)還要好,就覺(jué)得這才是闖天下的根本,以前的根本就是狗屎,改天又接觸了一樣技術(shù),發(fā)現(xiàn)這才是潮流,那些東西根本就是老掉牙的東西...云云。你能如何的評(píng)價(jià)這樣的人呢,你能說(shuō)他不對(duì)嗎?由于它的認(rèn)識(shí)的局限性,而發(fā)出的言論,除了會(huì)心一笑,你還能做什么?  回復(fù)  更多評(píng)論   

    # re: Ibatis VS Hibernate 2008-07-17 10:06 OneEyeWolf

    @lan
    right. 產(chǎn)生技術(shù)的爭(zhēng)論,很頭疼,有時(shí)候取決與誰(shuí)的推動(dòng)力大,而不是誰(shuí)的正確,只有結(jié)果知道誰(shuí)對(duì)誰(shuí)錯(cuò)。  回復(fù)  更多評(píng)論   

    # re: Ibatis VS Hibernate 2008-08-16 12:02 wueddie

    于我心有戚戚焉!

    類似樓主的想法和心情我兩三年前也曾有過(guò)。雖然我無(wú)意于這種爭(zhēng)論,但是非常同意樓主關(guān)于面向?qū)ο蠛蛿?shù)據(jù)庫(kù)關(guān)系的見地。其實(shí)只要本著實(shí)事求是的精神,要得出類似的結(jié)論是不難的。但是實(shí)際情況卻是很多人以偏蓋全。尤其是在JEE領(lǐng)域,很多人對(duì)數(shù)據(jù)庫(kù)的認(rèn)識(shí)都有限。總以為面向?qū)ο笫墙鉀Q一切問(wèn)題的法寶。  回復(fù)  更多評(píng)論   

    # re: Ibatis VS Hibernate 2008-11-12 13:19 zhouzhao21@gmail.com

    如果有時(shí)間,我覺(jué)得躺在草坪上看看Unix的編程藝術(shù),看看代碼大全,看看Oracle的編程藝術(shù),比看Hibernate的SB書要愜意多了。

    -----------
    同感  回復(fù)  更多評(píng)論   

    # re: Ibatis VS Hibernate[未登錄](méi) 2008-11-28 09:27 henry1451

    LZ和大家的評(píng)論都說(shuō)的非常中懇.  回復(fù)  更多評(píng)論   

    # re: Ibatis VS Hibernate 2013-08-09 13:34 鉆石風(fēng)暴

    完全不用hibernate,直接無(wú)視,曾經(jīng)用過(guò),什么垃圾玩意啊,一個(gè)簡(jiǎn)單問(wèn)題搞那么復(fù)雜。簡(jiǎn)單查一個(gè)多表關(guān)聯(lián)列表ibatis5分鐘搞定,hibernate搞那么復(fù)雜。數(shù)據(jù)庫(kù)的二維表和oo思想表面上看好像有點(diǎn)像,其實(shí)如果用的深入了,二者是根本無(wú)法調(diào)和統(tǒng)一的事物,因?yàn)殛P(guān)系數(shù)據(jù)庫(kù)是著眼于關(guān)系,針對(duì)一個(gè)表來(lái)說(shuō)每個(gè)字段歸根到底是一對(duì)一關(guān)系,才形成了表。  回復(fù)  更多評(píng)論   

    導(dǎo)航

    留言簿(15)

    隨筆分類

    值得一看的博客

    積分與排名

    最新評(píng)論

    閱讀排行榜

    主站蜘蛛池模板: 亚洲免费视频一区二区三区| 国产免费人视频在线观看免费| 无人视频免费观看免费视频| 久久亚洲精品成人AV| 亚洲午夜日韩高清一区| 女人被男人躁的女爽免费视频| 色猫咪免费人成网站在线观看| 男女猛烈无遮掩视频免费软件| 亚洲男人天堂2022| 亚洲酒色1314狠狠做| 久久精品国产亚洲网站| 久久久久一级精品亚洲国产成人综合AV区 | 久久夜色精品国产亚洲av| 成人免费视频观看无遮挡| 222www免费视频| 国产麻豆成人传媒免费观看| 亚洲日韩在线观看免费视频| 国产亚洲福利一区二区免费看| 亚洲日本VA中文字幕久久道具| 日本亚洲免费无线码| 2020久久精品亚洲热综合一本 | 日本卡1卡2卡三卡免费| 亚洲精品偷拍视频免费观看| 日本视频免费观看| 免费高清A级毛片在线播放| 校园亚洲春色另类小说合集| 亚洲国产欧美日韩精品一区二区三区| 77777亚洲午夜久久多喷| 亚洲最大成人网色香蕉| 亚洲人成电影院在线观看| 666精品国产精品亚洲| 亚洲综合综合在线| 亚洲视频网站在线观看| 亚洲精品国产成人中文| 亚洲精品国产情侣av在线| 亚洲国产精品乱码在线观看97| 亚洲一级毛片免费看| 亚洲综合校园春色| 亚洲欧美日韩国产精品一区| 午夜亚洲WWW湿好爽| 色费女人18女人毛片免费视频|