熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java開源技術 >> 正文

Hibernate與IBatis的優缺點及可行性分析

2013-11-23 20:21:17  來源: Java開源技術 

  優點

  簡單

  易於學習易於使用通過文檔和源代碼可以比較完全的掌握它的設計思路和實現

  實用

  提供了數據映射功能提供了對底層數據訪問的封裝(例如)提供了dao框架可以使我們更容易的開發和配置我們的dal層

  靈活

  通過sql基本上可以實現我們不使用數據訪問框架可以實現的所有功能或許更多

  功能完整

  提供了連接管理緩存支持線程支持(分布式)事物管理通過配置作關系對象映射等數據訪問層需要解決的問題提供了dao支持並在dao框架中封裝了Hibernate和datamapper增強系統的可維護性通過提供dal層將業務邏輯和數據訪問邏輯分離使系統的設計更清晰更易維護更易單元測試sql和代碼的分離提高了可維護性

  缺點

  滯後性

  還沒有明確對net的支持最新版本在下編譯可以但有些單元測試不能通過

  不成熟工程實踐較少ibatisnet在實際項目中的使用較少 只是理論上可行

  半orm工具支持較少需要我們自己寫sql並且net下還未發現可以自動生成業務層類和配置文件的工具這點和Hibernate不一樣Hibernate會為我們的數據庫直接產生sql並有一些輔助工具因此使用ibatis比Hibernate要多做一些工作

  可行性

  沒有最好的框架只有最適合的框架 存在的便是合理的它存在就說明有它存在的道理但它未必為我們存在所以選擇一個框架最主要的是看它對你有沒有意義意義有多大是不是比其他框架帶給 你的好處要多沒有絕對的優點也沒有絕對的缺點重要的是看在什麼情況下討論

  上面說了部分的ibatis的優點和部分缺點這些優點從理論上證明ibatis對任何數據持久層都合適但未必是最好的選擇下面對上面的優缺點分別從兩方面討論

  簡單

  我們都喜歡簡單簡單意味著學習成本低使用中出錯的可能性低同時簡單的東西一般來說功能不夠強大反過來復雜的東西學習成本高用起來不方便並且團隊沒有很強的技術實力一般不要使用

  實用

  解決了項目中需要解決的問題這是任何實際工程中采用的框架和工具都應具有的性質否則就不要拿到實際項目中來

  靈活

  靈活有兩層意思一種是簡單易擴展另一種是功能強大提供了很多選項ibatis屬於前者Hibernate屬於後者兩者各有優缺點

  功能完整

  ibatis的功能完整也是相對的比我們自己開發的框架應該完整但對比其他框架肯定也有一些解決不了的問題

  增強系統的可維護性利用ibatis可以做到sql和代碼分離可以設計出一個清晰的數據訪問層(dal)但項目架構是否科學合理是否以維護關鍵不在ibatis因 為它只是一個數據層框架但是我們也不得不清楚要想發揮ibatis的優勢我們需要做一些額外工作比如最好設計dao接口需要將業務層實體和對實 體的訪問放在不同的工程中同時需要維護xml配置文件

  滯後性

  ibatis組現在還沒有提到要支持net很多人在net下使用ibatis都出現了問題所以如果要使用net開發ibatis不是一個好選擇還需要等待

  不成熟

  開源的東西很難說成熟但一般比我們自己寫的框架要成熟由於我們可以拿到他的源代碼所以關鍵在於我們能否駕馭它

  半orm工具支持少

  這注定了ibatis不能從本質上提升開發效率我們需要自己寫sql寫實體類寫配置文件但這也是它優越的地方它沒有為我們做的他多所以我們就 有更多的施展空間而且它非常適合那些並不能完全控制數據庫的系統和需要利用數據庫本身提供的高級特性的統計查詢系統的開發

  使用ibatis需要自己寫sql由於我們的sql不可能完全符合sql標准比起Hibernate產生的sql來可移植性差不過由於我們更改 數據庫的可能性較小對我們來說sql符合標准以便可以在遷移到不同服務器時代價最小並不是十分必要的另一方面Hibernate雖然可以屏蔽很多 數據庫間的不同但是卻很難利用某些數據庫的高級特性比如oracle的分析統計函數

  Hibernate不適合數據庫模式不規范約束不完整需要大量復雜查詢的系統同時Hibernate的學習成本較高完全掌握Hibernate也較困難風險較大

  自己寫框架未必比ibatis的好穩定強大和可擴展而且自己開發框架也需要較大的工作量

  如果使用dotnet並且要選一個數據層框架而系統中有相當一部分較復雜的sql或數據庫設計不合理髒數據多對性能和資源要求嚴格ibatis 是一個比較不錯的選擇他的那些缺點並不是致命的而且也是有一些解決方案的尤其是當選用了ibatis的dataaccess作為dao框架時我 們可以同時使用Hibernate和datamapper(ibatisnet的核心組件)那樣將會使風險降到最低並且整個系統的 框架比較合理

  另外利用ibatis可以統一編碼風格節約開發成本大家不會再把精力浪費到分頁 連接池 主鍵生成等地方了可以集中精力進行業務組件的編寫

  綜上 很多時候我們要在是自己開發框架和選用第三方框架和選用什麼樣的框架問題上進行綜合考慮考慮的標准當然是項目的當前情況和我們希望達到目的的一個平衡

  ibatis只是封裝了數據訪問層替我們做了部分的對象關系映射但我們的代價是必須要寫xml配置文件相對於Hibernate我們還要寫很多 sqlHibernate通過工具直接從數據庫模式生成實體類和基本的配置文件而且大部分情況下不需要我們寫sql會較大的提升開發效率但這些也 有很多的局限性尤其是對環境的要求較高(數據庫設計對象設計團隊的協作等)

  個人感覺ibatis對項目比較有意義的地方在於它小巧靈活可擴展封裝了數據訪問層(事務緩存異常日志)並提供了dao框架支持

  利用ibatis我們可以做到代碼和sql的分離只要sql能夠解決的問題ibatis就能幫我們較容易的解決同時也使我們的項目對某一框架的依賴 性變小(因為ibatis是非侵入性的)這將極大的降低項目風險減少解決復雜問題的時間使項目的維護變得簡單

  ibatis對於應用的修改調試擴充和維護將會變得容易自然修改時我們主要修改的是代表模型的實體對象xml配置文件中的sql和/或配置文 件的resultmap(很多時候是不需要的)同時sql和代碼分離我們不用在代碼的stringbuffer的append方法之間尋找需要修改 的sql配置文件中的sql便利了我們的調試和對sql的評審及以後的sql重用

  利用一些框架在前期一般會拖慢開發效率因為我們需要付出學習成本很多時候使用框架需要寫很多配置文件在使用不熟時開發速度較慢同時利用框架往往 使系統代碼量增大比如model和model模型開發效率應該還是model四層的架構肯定比兩層的代碼量大 但對於中後期開發和維護將會極大的提高效率

  利用一些較完全的開發框架和代碼生成工具在前期會較大的提高開發效率但在後期常常會拖慢進度並有可能成為以後維護的夢魇比如torque生成實體類和其對應的sql雖大幅提高了效率但修改負擔較大

  比較理想的開發方式是使用簡單框架結合簡單的代碼生成工具框架提供系統的基礎服務並規范開發框架一方面提供了開發中某一方面的開發基礎支持比如數 據訪問層事務日志公用類異常等另一方面也為開發定義了模式定義了系統的基本輪廓同時通過簡單的代碼生成工具生成部分低級的代碼比如通 過工具從數據庫模式生成實體類這些類生成後我們可以自由修改

  Hibernate是十分強大比較完善的orm框架不過這是它的優點也是它的缺點 JEE系統是否采用Hibernate是一個需要認真評估的問題

  要想Hibernate工作的好數據庫的設計必須好同時對於復雜的數據操作同時需要使用sqlHibernate對於直接使用sql的支持比Hibernate要自然這一點是可以接受的

  Hibernate比較復雜功能強大而靈活要用好Hibernate確實不是很簡單當然spring框架提供了對Hibernate的封裝使Hibernate的使用變得簡單了點

  可以說ibatis在任何系統裡都適用但未必是最好選擇不過ibatis提供的思路是我們應該仔細考慮的


From:http://tw.wingwit.com/Article/program/Java/ky/201311/28363.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.