【轉】我爲何選擇 iBatis 而不是 Hibernate(對於正在選型的人的建議)

我在最初的選型的時候是打算選擇 Hibernate 的,在研究的過程當中發現了 iBatis,通過 
分析比較以後我選擇了 iBatis。如今我已經使用 iBatis 完成了一箇中小型的項目。這個 
項目在性能、可維護性、可擴展性方面都很是令我滿意。 

在這個過程當中我也不斷的與使用過或者正在使用 Hibernate 的人進行過探討。並且我自己 
也在不斷的跟進 Hibernate 的發展。 

最終,個人結論是 iBatis 的選擇很是正確,並且越用越喜歡它了。 

固然了,我對 Hibernate 的理解仍是很是有限的,因此這裏的關於 Hibernate 的一些觀 
點的錯誤之處但願可以獲得 Hibernate 高手的指正。 


1. iBatis 易於掌握。拿來文檔看半天到兩天就能夠掌握了。 
   Hibernate 可能須要 3 倍以上的時間來掌握。 
   
2. iBatis 更容易進行 sql 的 優化。 

   這個應該你們都有共識了。另外 Hibernate 生成的 sql 也實在是太難看了。鑑 
   於有的朋友提到了 sql 不過重要。我想在這裏強調一下個人經驗,通常系統性能 
   的 瓶頸都在數據庫 上。因此這一點是 iBatis 很是重要的一個優點。 
   
3. iBatis 能夠進行細粒度的優化 

   3.1 好比說我有一個表, 這個表有幾個或者幾十個字段 ,我須要更新其中 
       的一個字段,iBatis 很簡單,執行一個sql 
       UPDATE TABLE_A SET column_1=#column_1# WHERE id=#id# 
       可是用 Hibernate 的話就比較麻煩了,缺省的狀況下 hibernate 會更新全部字段。 
       固然我記得 hibernate 有一個選項能夠控制只保存修改過的字段,可是我不太確 
       定這個功能的負面效果。 
       
   3.2 我須要列出一個表的部份內容,用 iBatis 的時候,這裏面的好處是能夠少從數據 
     庫讀不少數據,節省流量 
       SELECT ID, NAME FROM TABLE_WITH_A_LOT_OF_COLUMN WHERE ... 

     3.2.1 通常狀況下 
     Hibernate 會把全部的字段都選出來。好比說有一個上面表有8個字段, 
     其中有一兩個比較大的字段,varchar(255)/text。上面的場景中我爲何要把他 
     們也選出來呢? 

     3.2.2 用 hibernate 的話,你又不能把這兩個不須要的字段設置爲 lazy load,因 
     爲還有不少地方須要一次把整個 domain object 加載出來。這個時候就能顯現出 
     ibatis 的好處了 

     3.2.3 Hibernate 還有一個方案,就是生成 javabean/map/object[](感謝 
     leelun/cjmm),可是這樣的話就可能會產生大量的多餘 class。map/object[] 的方式 
     應該不錯,我比較喜歡這種方式。 
       
   3.3 若是我須要更新一條記錄(一個對象),若是使用 hibernate,須要現把對 
     象 select 出來,而後再作 update。這對數據庫來講就是兩條 sql。而 iBatis 
     只須要一條 update 的 sql 就能夠了。減小一次與數據庫的交互,對於性能的 
     提高是很是重要。 

4. 開發方面 
   4.1 開發效率上,我以爲二者應該差很少 
   4.2 可維護性方面,我以爲 iBatis 更好一些。由於 iBatis 的 sql 都保存到 
       單獨的文件中。而 Hibernate 在有些狀況下可能會在 java 代碼中保存 
       sql/hql。 


5. 運行效率 
   5.1 在不考慮 cache 的狀況下,iBatis 應該會比hibernate 快一些或者不少 
      (根據實際狀況會有所不一樣)。 


       
固然 iBatis 也有比較大的缺點 
1. 不一樣數據庫類型的支持很差,若是你要開發的系統是要在對中數據間移植,那可能用 hibernate 比較好。 
2. 缺省的 cache 支持很差,可是 hibernate 的 cache 支持其實也不是很好,並且很複雜。尤爲是對於大併發量的應用。因此我更傾向於本身管理 cache。 


    很是感謝這麼多朋友對這個話題很感興趣。可是我感受你們並無對我第三部分提到的問題進行更深刻的思考。我晚些時候會提交一些 ibatis 的代碼。歡迎你們一塊兒來討論。 
相關文章
相關標籤/搜索