程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> MyBatis與Hibernate的比擬

MyBatis與Hibernate的比擬

編輯:關於JAVA

MyBatis與Hibernate的比擬。本站提示廣大學習愛好者:(MyBatis與Hibernate的比擬)文章只能為提供參考,不一定能成為您想要的結果。以下是MyBatis與Hibernate的比擬正文


第一章 Hibernate與MyBatis

Hibernate 是以後最風行的O/R mapping框架,它出生於sf.net,如今曾經成為Jboss的一部門。 Mybatis 是別的一種優良的O/R mapping框架。今朝屬於apache的一個子項目。

MyBatis 參考材料官網:http://www.mybatis.org/core/zh/index.html

Hibernate參考材料:http://docs.jboss.org/hibernate/core/3.6/reference/zh-CN/html_single/

1.1 Hibernate 簡介

Hibernate對數據庫構造供給了較為完全的封裝,Hibernate的O/R Mapping完成了POJO 和數據庫表之間的映照,和SQL 的主動生成和履行。法式員常常只需界說好了POJO 到數據庫表的映照關系,便可經由過程Hibernate 供給的辦法完成耐久層操作。法式員乃至不須要對SQL 的闇練控制, Hibernate/OJB 會依據制訂的存儲邏輯,主動生成對應的SQL 並挪用JDBC 接口加以履行。

1.2 MyBatis簡介

iBATIS 的出力點,則在於POJO 與SQL之間的映照關系。然後經由過程映照設置裝備擺設文件,將SQL所需的參數,和前往的成果字段映照到指定POJO。 絕對Hibernate“O/R”而言,iBATIS 是一種“Sql Mapping”的ORM完成。

第二章 開辟比較

開辟速度

Hibernate的真正控制要比Mybatis來得難些。Mybatis框架絕對簡略很輕易上手,但也絕對粗陋些。小我認為要用好Mybatis照樣起首要先懂得好Hibernate。

開辟社區

Hibernate 與Mybatis都是風行的耐久層開辟框架,但Hibernate開辟社區絕對多熱烈些,支撐的對象也多,更新也快,以後最高版本4.1.8。而Mybatis絕對鎮靜,對象較少,以後最高版本3.2。

開辟任務量

Hibernate和MyBatis都有響應的代碼生成對象。可以生成簡略根本的DAO層辦法。

針對高等查詢,Mybatis須要手動編寫SQL語句,和ResultMap。而Hibernate有優越的映照機制,開辟者無需關懷SQL的生成與成果映照,可以更專注於營業流程。

第三章 體系調優比較

Hibernate的調優計劃
制訂公道的緩存戰略;
盡可能應用延遲加載特征;
采取公道的Session治理機制;
應用批量抓取,設定公道的批處置參數(batch_size);
停止公道的O/R映照設計

Mybatis調優計劃

MyBatis在Session方面和Hibernate的Session性命周期是分歧的,異樣須要公道的Session治理機制。MyBatis異樣具有二級緩存機制。 MyBatis可以停止具體的SQL優化設計。

SQL優化方面

Hibernate的查詢會將表中的一切字段查詢出來,這一點會有機能消費。Hibernate也能夠本身寫SQL來指定須要查詢的字段,但如許就損壞了Hibernate開辟的簡練性。而Mybatis的SQL是手動編寫的,所以可以按需求指定查詢的字段。

Hibernate HQL語句的調優須要將SQL打印出來,而Hibernate的SQL被許多人厭棄由於太丑了。MyBatis的SQL是本身手動寫的所以調劑便利。但Hibernate具有本身的日記統計。Mybatis自己不帶日記統計,應用Log4j停止日記記載。

擴大性方面

Hibernate與詳細數據庫的聯系關系只需在XML文件中設置裝備擺設便可,一切的HQL語句與詳細應用的數據庫有關,移植性很好。MyBatis項目中一切的SQL語句都是依附所用的數據庫的,所以分歧數據庫類型的支撐欠好。

第四章 對象治理與抓取戰略

對象治理

Hibernate 是完全的對象/關系映照處理計劃,它供給了對象狀況治理(state management)的功效,使開辟者不再須要理睬底層數據庫體系的細節。也就是說,絕對於罕見的 JDBC/SQL 耐久層計劃中須要治理 SQL 語句,Hibernate采取了更天然的面向對象的視角來耐久化 Java 運用中的數據。

換句話說,應用 Hibernate 的開辟者應當老是存眷對象的狀況(state),不用斟酌 SQL 語句的履行。這部門細節曾經由 Hibernate 掌管妥善,只要開辟者在停止體系機能調優的時刻才須要停止懂得。

而MyBatis在這一塊沒有文檔解釋,用戶須要對對象本身停止具體的治理。

抓取戰略

Hibernate對實體聯系關系對象的抓取有著優越的機制。關於每個聯系關系關系都可以具體地設置能否延遲加載,而且供給聯系關系抓取、查詢抓取、子查詢抓取、批量抓取四種形式。 它是具體設置裝備擺設和處置的。

而Mybatis的延遲加載是全局設置裝備擺設的。

第五章 緩存機制比較

Hibernate緩存

Hibernate一級緩存是Session緩存,應用好一級緩存就須要對Session的性命周期停止治理好。建議在一個Action操作中應用一個Session。一級緩存須要對Session停止嚴厲治理。

Hibernate二級緩存是SessionFactory級的緩存。 SessionFactory的緩存分為內置緩存和外置緩存。內置緩存中寄存的是SessionFactory對象的一些聚集屬性包括的數據(映照元素據及預定SQL語句等),關於運用法式來講,它是只讀的。外置緩存中寄存的是數據庫數據的正本,其感化和一級緩存相似.二級緩存除之內存作為存儲介質外,還可以選用硬盤等內部存儲裝備。二級緩存稱為過程級緩存或SessionFactory級緩存,它可以被一切session同享,它的性命周期隨同著SessionFactory的性命周期存在和滅亡。

MyBatis緩存

MyBatis 包括一個異常壯大的查詢緩存特征,它可以異常便利地設置裝備擺設和定制。MyBatis 3 中的緩存完成的許多改良都曾經完成了,使得它加倍壯大並且易於設置裝備擺設。

默許情形下是沒有開啟緩存的,除部分的 session 緩存,可以加強變現並且處置輪回 依附也是必需的。要開啟二級緩存,你須要在你的 SQL 映照文件中添加一行: <cache/>

字面上看就是如許。這個簡略語句的後果以下:

映照語句文件中的一切 select 語句將會被緩存。
映照語句文件中的一切 insert,update 和 delete 語句會刷新緩存。
緩存會應用 Least Recently Used(LRU,比來起碼應用的)算法來發出。
依據時光表(好比 no Flush Interval,沒有刷新距離), 緩存不會以任什麼時候間次序 來刷新。
緩存會存儲列表聚集或對象(不管查詢辦法前往甚麼)的 1024 個援用。
緩存會被視為是 read/write(可讀/可寫)的緩存,意味著對象檢索不是同享的,而 且可以平安地被挪用者修正,而不攪擾其他挪用者或線程所做的潛伏修正。
一切的這些屬性都可以經由過程緩存元素的屬性來修正。

好比: <cache eviction="FIFO" flushInterval="60000" size="512" readOnly="true"/>

這個更高等的設置裝備擺設創立了一個 FIFO 緩存,並每隔 60 秒刷新,存數成果對象或列表的 512 個援用,並且前往的對象被以為是只讀的,是以在分歧線程中的挪用者之間修正它們會 招致抵觸。可用的發出戰略有, 默許的是 LRU:

LRU – 比來起碼應用的:移除最長時光不被應用的對象。
FIFO – 先輩先出:按對象進入緩存的次序來移除它們。
SOFT – 軟援用:移除基於渣滓收受接管器狀況和軟援用規矩的對象。
WEAK – 弱援用:更積極地移除基於渣滓搜集器狀況和弱援用規矩的對象。
flushInterval(刷新距離)可以被設置為隨意率性的正整數,並且它們代表一個公道的毫秒 情勢的時光段。默許情形是不設置,也就是沒有刷新距離,緩存僅僅挪用語句時刷新。

size(援用數量)可以被設置為隨意率性正整數,要記住你緩存的對象數量和你運轉情況的 可用內存資本數量。默許值是1024。

readOnly(只讀)屬性可以被設置為 true 或 false。只讀的緩存會給一切挪用者前往緩 存對象的雷同實例。是以這些對象不克不及被修正。這供給了很主要的機能優勢。可讀寫的緩存 會前往緩存對象的拷貝(經由過程序列化) 。這會慢一些,然則平安,是以默許是 false。

雷同點

Hibernate和Mybatis的二級緩存除采取體系默許的緩存機制外,都可以經由過程完成你本身的緩存或為其他第三方緩存計劃,創立適配器來完整籠罩緩存行動。

分歧點

Hibernate的二級緩存設置裝備擺設在SessionFactory生成的設置裝備擺設文件中停止具體設置裝備擺設,然後再在詳細的表-對象映照中設置裝備擺設是那種緩存。

MyBatis的二級緩存設置裝備擺設都是在每一個詳細的表-對象映照中停止具體設置裝備擺設,如許針對分歧的表可以自界說分歧的緩存機制。而且Mybatis可以在定名空間中同享雷同的緩存設置裝備擺設和實例,經由過程Cache-ref來完成。

二者比擬

由於Hibernate對查詢對象有著優越的治理機制,用戶無需關懷SQL。所以在應用二級緩存時假如湧現髒數據,體系會報失足誤並提醒。

而MyBatis在這一方面,應用二級緩存時須要特殊當心。假如不克不及完整肯定數據更新操作的涉及規模,防止Cache的自覺應用。不然,髒數據的湧現會給體系的正常運轉帶來很年夜的隱患。

第六章 Hibernate與Mybatis比較總結

二者雷同點

Hibernate與MyBatis都可所以經由過程SessionFactoryBuider由XML設置裝備擺設文件生成SessionFactory,然後由SessionFactory 生成Session,最初由Session來開啟履行事務和SQL語句。個中SessionFactoryBuider,SessionFactory,Session的性命周期都是差不多的。

Hibernate和MyBatis都支撐JDBC和JTA事務處置。

Mybatis優勢

MyBatis可以停止更加過細的SQL優化,可以削減查詢字段。

MyBatis輕易控制,而Hibernate門坎較高。

Hibernate優勢

Hibernate的DAO層開辟比MyBatis簡略,Mybatis須要保護SQL和成果映照。

Hibernate對對象的保護懈弛存要比MyBatis好,對增刪改查的對象的保護要便利。

Hibernate數據庫移植性很好,MyBatis的數據庫移植性欠好,分歧的數據庫須要寫分歧SQL。

Hibernate有更好的二級緩存機制,可使用第三方緩存。MyBatis自己供給的緩存機制欠安。

別人總結

Hibernate功效壯大,數據庫有關性好,O/R映照才能強,假如你對Hibernate相當精曉,並且對Hibernate停止了恰當的封裝,那末你的項目全部耐久層代碼會相當簡略,須要寫的代碼很少,開辟速度很快,異常爽。

Hibernate的缺陷就是進修門坎不低,要精曉門坎更高,並且怎樣設計O/R映照,在機能和對象模子之間若何衡量獲得均衡,和如何用好Hibernate方面須要你的經歷和才能都很強才行。

iBATIS入門簡略,即學即用,供給了數據庫查詢的主動對象綁定功效,並且延續了很好的SQL應用經歷,關於沒有那末高的對象模子請求的項目來講,相當完善。

iBATIS的缺陷就是框架照樣比擬粗陋,功效另有缺掉,固然簡化了數據綁定代碼,然則全部底層數據庫查詢現實照樣要本身寫的,任務量也比擬年夜,並且不太輕易順應疾速數據庫修正。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved