摘自原文鏈接:
https://zhidao.baidu.com/question/1883317112619717188.html?device=mobile&ssid=0&from=1019023c&uid=0&pu=sz@320_1001,ta@iphone_2_5.1_3_537,usm@1&bd_page_type=1&baiduid=7B7FCE837BB2299C0D9A30E56ECFEB48&tj=www_zhidao_normal_6_0_10_title
一.共同點:
1.都是O/R mapping框架,直接與數據庫打交道,將數據持久化。
2.都提供方言支持不同類型數據庫的訪問,通過xml文件格式將數據庫表與java對象連接起來。
3.都可以交給sPRing來管理
4.都是開源軟件
二.區別:
hibernate對象關系映射框架,是當前流行的O/R框架,來自于sf.net,現在已成為HBOSS的一部分。hibernate相對較復雜,學習周期長。
ibatis/mybatis是另外一種優秀的o/r mapping框架,目前屬于apache的一個子項目,2013年11月遷移到Github。ibatis上手快,很容易學學習。iBATIS提供的持久層框架包括SQL Maps和Data access Objects(DAO)。
三.原理:
hibernate對數據結構進行了很好的封裝,可以實現java對象也就是POJO是數據庫表之間的映射,還能根據POJO及SQL自動生成表和執行命令。程序員往往只需定義好了pojo到數據庫表的映射關系,即可通過hibernate提供的方法完成持久層操作。程序員甚至不需要對sql 的熟練掌握,hibernate/ojb會根據制定的存儲邏輯,自動生成對應的sql并調用jdbc接口加以執行。
而ibatis則重點在于pojo與sql之間的映射關系。ibatis不能讓我們通過POJO生成SQL語句來執行。具體的sql需要程序員編寫,然后通過映射配置文件,將sql所需的參數,以及返回的結果字段映射到指定pojo。
四.機制:
使用ibatis提供的orm機制,對業務邏輯實現人員而言,面對的是純粹的java對象。這一層與通過hibernate實現orm而言基本一致,而對于具體的數據操作,hibernate會自動生成sql語句,而ibatis則要求開發者編寫具體的sql語句。相對hibernate而言,ibatis以sql開發的工作量和數據庫移植性上的讓步,為系統設計提供了更大的自由空間。
五.系統維護或者二次開發:
當系統維護或者二次開發,無法對數據庫結構做到控制和修改,那ibatis的靈活性將比hibernate更適合。
六.海量數據:
系統數據處理量巨大,性能要求極為苛刻,這往往意味著我們必須通過經過高度優化的sql語句(或存儲過程)才能達到系統性能設計指標。在這種情況下ibatis會有更好的可控性和表現。
七.自動化程度:
ibatis需要手寫sql語句,也可以生成一部分,hibernate則基本上可以自動生成,偶爾會寫一些hql。同樣的需求,ibatis的工作量比hibernate要大很多。類似的,如果涉及到數據庫字段的修改,hibernate修改的地方很少,而ibatis要把那些sql mapping的地方一一修改。
八.與數據映射關系:
ibatis以數據庫字段一一對應映射得到的po和hibernte這種對象化映射得到的po是截然不同的,本質區別在于這種po是扁平化的,不像hibernate映射的po是可以表達立體的對象繼承,聚合等等關系的,這將會直接影響到你的整個軟件系統的設計思路。
(九.技術支持:
hibernate現在已經是主流o/r mapping框架,從文檔的豐富性,產品的完善性,版本的開發速度都要強于ibatis)
十.實現過程查看:
1.hibernate配置,進行數據庫連接。
2.POJO與數據庫映射的xml文件介紹
3.得到sessionFactory我們就可以通過會話工廠操作數據庫
4.ibatis配置信息設置
5.POJO與數據庫的建立xml文件定義
6.加載ibatis配置文件,給client初始化
6.通過client操作數據庫
新聞熱點
疑難解答