溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

為什么阿里巴巴拋棄Hibernate使用MyBatis框架?

發(fā)布時(shí)間:2020-06-09 21:19:12 來(lái)源:億速云 閱讀:399 作者:元一 欄目:編程語(yǔ)言

MyBatis

MyBatis是支持普通 SQL查詢,存儲(chǔ)過(guò)程和高級(jí)映射的優(yōu)秀持久層框架。MyBatis 消除了幾乎所有的JDBC代碼和參數(shù)的手工設(shè)置以及結(jié)果集的檢索。MyBatis 使用簡(jiǎn)單的 XML或注解用于配置和原始映射,將接口和 Java 的POJOs(Plain Ordinary Java Objects,普通的 Java對(duì)象)映射成數(shù)據(jù)庫(kù)中的記錄。

每個(gè)MyBatis應(yīng)用程序主要都是使用SqlSessionFactory實(shí)例的,一個(gè)SqlSessionFactory實(shí)例可以通過(guò)SqlSessionFactoryBuilder獲得。SqlSessionFactoryBuilder可以從一個(gè)xml配置文件或者一個(gè)預(yù)定義的配置類的實(shí)例獲得。

用xml文件構(gòu)建SqlSessionFactory實(shí)例是非常簡(jiǎn)單的事情。推薦在這個(gè)配置中使用類路徑資源(classpath resource),但你可以使用任何Reader實(shí)例,包括用文件路徑或file://開(kāi)頭的url創(chuàng)建的實(shí)例。MyBatis有一個(gè)實(shí)用類----Resources,它有很多方法,可以方便地從類路徑及其它位置加載資源。

MyBatis的優(yōu)勢(shì)
MyBatis 是一款非常優(yōu)秀的持久層框架,它支持定制化 SQL、存儲(chǔ)過(guò)程以及高級(jí)映射。不僅避免了幾乎所有的 JDBC 代碼和手動(dòng)設(shè)置參數(shù)以及獲取結(jié)果集。還可以使用簡(jiǎn)單的 XML 或注解來(lái)配置和映射原生信息,將接口和 Java 的 POJOs映射成數(shù)據(jù)庫(kù)中的記錄。
我們?cè)谑褂脗鹘y(tǒng)JDBC時(shí),往往需要寫很多JDBC代碼,需要自己寫SQL語(yǔ)句以及自己裝配參數(shù),然后自己對(duì)結(jié)果集進(jìn)行封裝處理。
而Mybatis則幫我們簡(jiǎn)化了以上功能,只需要一些配置文件(xml)或是注解的方式即可完成對(duì)數(shù)據(jù)庫(kù)的查詢以及結(jié)果的映射封裝。
為什么MyBatis能在國(guó)內(nèi)大廠里這么流行?
Mybatis之所以流行的一個(gè)原因是上手快,當(dāng)學(xué)完JDBC之后,再去學(xué)習(xí)Mybatis,上手時(shí)間要比Hibernate快。一個(gè)技術(shù)學(xué)習(xí)成本低,也是一個(gè)優(yōu)勢(shì)。
另外一個(gè)原因就是sql優(yōu)化上了,業(yè)務(wù)復(fù)雜的sql語(yǔ)句通常需要進(jìn)行優(yōu)化,此時(shí)操作Mybatis更加容易一些。
現(xiàn)在spring boot和Mybatis plus的出現(xiàn),使Mybatis使用起來(lái)更加簡(jiǎn)單了。所以在大多數(shù)場(chǎng)景里,MyBatis更適合。
為什么阿里巴巴的持久層拋棄Hibernate,采用MyBatis框架?
原因大概有以下4點(diǎn):
1、阿里在Mybatis上下了大功夫,他們對(duì)數(shù)據(jù)查詢的要求也比較高,而Hibernate把數(shù)據(jù)庫(kù)和你隔離了,如果使用Hibernate,雖然能對(duì)生成的查詢進(jìn)行一定程度的定制,但開(kāi)發(fā)起來(lái)付出的代價(jià)更大。
2、對(duì)于阿里這種規(guī)模的網(wǎng)站服務(wù),對(duì)cache的依賴是非常大的,對(duì)cache邏輯的要求非常高,而且一定要具體問(wèn)題,具體優(yōu)化。Hibernate自帶的cache并不能滿足像阿里這樣的公司的需求。
3、Hibernate在你項(xiàng)目開(kāi)始時(shí)候省事,但是會(huì)導(dǎo)致業(yè)務(wù)邏輯模型和數(shù)據(jù)庫(kù)模型互相依賴的程度太高,一旦項(xiàng)目變遷,隨便改一處數(shù)據(jù)庫(kù)的schema,整個(gè)java項(xiàng)目可能要改幾十處!而MyBatis的自動(dòng)mapping做的也不差,開(kāi)發(fā)起來(lái)也沒(méi)多花多少時(shí)間。等項(xiàng)目進(jìn)入中后期,你需要大量定制和優(yōu)化查詢的時(shí)候,MyBatis的開(kāi)發(fā)效率就勝出了。
4、很多地方Hibernate可以強(qiáng)大到只用一行代碼解決很多問(wèn)題,但比如說(shuō)一個(gè)update()或者save()到底做了什么,這里既有Hibernate本身的邏輯,也有你應(yīng)用的邏輯,如果這一行產(chǎn)生了問(wèn)題,你該如何去做?而MyBatis的開(kāi)發(fā)和調(diào)優(yōu)更加方便簡(jiǎn)單。尤其是需要處理大量數(shù)據(jù)或者大并發(fā)情況的網(wǎng)站服務(wù),這也阿里選擇MyBatis的原因。
為什么阿里巴巴拋棄Hibernate使用MyBatis框架?
大廠都在用MyBatis,跳槽的時(shí)候MyBatis更是面試必問(wèn)的內(nèi)容,那你對(duì)于MyBatis又掌握了多少呢

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI