您好,登錄后才能下訂單哦!
小編給大家分享一下iBATIS與Hibernate間有什么區(qū)別,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
iBATIS與Hibernate間的取舍都是程序員要選擇的一個(gè)問題,我在最初的選型的時(shí)候是打算選擇Hibernate 的,在研究的過程中發(fā)現(xiàn)了iBATIS,經(jīng)過分析比較之后我選擇了iBATIS?,F(xiàn)在我已經(jīng)使用iBATIS 完成了一個(gè)中小型的項(xiàng)目。這個(gè)項(xiàng)目在性能、可維護(hù)性、可擴(kuò)展性方面都非常令我滿意。
在這個(gè)過程中我也不斷的與使用過或者正在使用 Hibernate 的人進(jìn)行過探討。而且我本身也在不斷的跟進(jìn) Hibernate 的發(fā)展。最終,我的結(jié)論是iBATIS 的選擇非常正確,而且越用越喜歡它了。當(dāng)然了,我對 Hibernate 的理解還是非常有限的,所以這里的關(guān)于 Hibernate 的一些觀點(diǎn)的錯(cuò)誤之處希望能夠得到 Hibernate 高手的指正。
1.iBATIS易于掌握。
拿來文檔看半天到兩天就可以掌握了。Hibernate 可能需要 3 倍以上的時(shí)間來掌握。
2. iBATIS更容易進(jìn)行 sql 的 優(yōu)化。
這個(gè)應(yīng)該大家都有共識了。另外 Hibernate 生成的 sql 也實(shí)在是太難看了。鑒于有的朋友提到了 sql 不太重要。我想在這里強(qiáng)調(diào)一下我的經(jīng)驗(yàn),一般系統(tǒng)性能的瓶頸都在數(shù)據(jù)庫上。所以這一點(diǎn)是iBATIS非常重要的一個(gè)優(yōu)勢。
3.iBATIS可以進(jìn)行細(xì)粒度的優(yōu)化
3.1 比如說我有一個(gè)表,這個(gè)表有幾個(gè)或者幾十個(gè)字段,我需要更新其中的一個(gè)字段,iBATIS很簡單,執(zhí)行一個(gè)sql UPDATE TABLE_A SET column_1=#column_1# WHERE id=#id# 但是用 Hibernate 的話就比較麻煩了,缺省的情況下Hibernate會更新所有字段。當(dāng)然我記得Hibernate有一個(gè)選項(xiàng)可以控制只保存修改過的字段,但是我不太確定這個(gè)功能的負(fù)面效果。
3.2 我需要列出一個(gè)表的部分內(nèi)容,用iBATIS 的時(shí)候,這里面的好處是可以少從數(shù)據(jù)庫讀很多數(shù)據(jù),節(jié)省流量SELECT ID, NAME FROM TABLE_WITH_A_LOT_OF_COLUMN WHERE ...
3.2.1 一般情況
Hibernate 會把所有的字段都選出來。比如說有一個(gè)上面表有8個(gè)字段,其中有一兩個(gè)比較大的字段,varchar(255)/text。上面的場景中我為什么要把他們也選出來呢?
3.2.2 用Hibernate的話,你又不能把這兩個(gè)不需要的字段設(shè)置為 lazy load,因?yàn)檫€有很多地方需要一次把整個(gè) domain object 加載出來。這個(gè)時(shí)候就能顯現(xiàn)出iBATIS的好處了
3.2.3 Hibernate 還有一個(gè)方案,就是生成 javabean/map/object[](感謝leelun/cjmm),但是這樣的話就可能會產(chǎn)生大量的多余 class。map/object[] 的方式應(yīng)該不錯(cuò),我比較喜歡這種方式。
3.3 如果我需要更新一條記錄(一個(gè)對象),如果使用Hibernate,需要現(xiàn)把對象 select 出來,然后再做 update。這對數(shù)據(jù)庫來說就是兩條 sql。而iBATIS只需要一條 update 的 sql 就可以了。減少一次與數(shù)據(jù)庫的交互,對于性能的提升是非常重要。
4. 開發(fā)方面
4.1 開發(fā)效率上,我覺得兩者應(yīng)該差不多
4.2 可維護(hù)性方面,我覺得iBATIS更好一些。因?yàn)閕BATIS的sql都保存到單獨(dú)的文件中。而 Hibernate 在有些情況下可能會在 java 代碼中保存
sql/hql。
5. 運(yùn)行效率
5.1 在不考慮 cache 的情況下,iBATIS應(yīng)該會比Hibernate快一些或者很多(根據(jù)實(shí)際情況會有所不同)。
當(dāng)然iBATIS也有比較大的缺點(diǎn)
1. 不同數(shù)據(jù)庫類型的支持不好,如果你要開發(fā)的系統(tǒng)是要在對中數(shù)據(jù)間移植,那可能用Hibernate比較好。
2. 缺省的 cache 支持不好,但是Hibernate的 cache 支持其實(shí)也不是很好,而且很復(fù)雜。尤其是對于大并發(fā)量的應(yīng)用。所以我更傾向于自己管理 cache。
以上是“iBATIS與Hibernate間有什么區(qū)別”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。