阿里為什麼棄用hibernate?看完Mybatis源碼我黯然流淚了

MyBatis和hibernate誰優誰劣?一直都有爭論,這不,前幾天群裡關於這個話題,又吵起來了。

阿里為什麼棄用hibernate?看完Mybatis源碼我黯然流淚了

眾多過來人總結出來的經驗就是:hibernate確實厲害,但MyBatis學習成本低,使用簡單,能達到目的,不增加額外工作量(或很少增加),架構來說MyBatis功能單一,場景明確,耦合度低,無狀態,便於(放在業務代碼裡)分佈式部署。所以在大多數場景裡,MyBatis更適合。


為什麼阿里巴巴的持久層拋棄hibernate,採用MyBatis框架?

原因大概有以下4點:

  1. 阿里在mysql上下了大功夫,他們對數據查詢的要求也比較高,很多sql查詢都要精心設計。而hibernate把數據庫和你隔離了,如果使用hibernate,雖然能對生成的查詢進行一定程度的定製,但開發起來付出的代價更大。
  2. 對於阿里這種規模的網站服務,對cache的依賴是非常大的,對cache邏輯的要求非常高,而且一定要具體問題,具體優化。hibernate自帶的cache並不能滿足像阿里這樣的公司的需求。
  3. hibernate在你項目開始時候省事,但是會導致業務邏輯模型和數據庫模型互相依賴的程度太高,一旦項目變遷,隨便改一處數據庫的schema,整個java項目可能要改幾十處!而MyBatis的自動mapping做的也不差,開發起來也沒多花多少時間。等項目進入中後期,你需要大量定製和優化查詢的時候,MyBatis的開發效率就勝出了。
  4. 很多地方Hibernate可以強大到只用一行代碼解決很多問題,但比如說一個update()或者save()到底做了什麼,這裡既有hibernate本身的邏輯,也有你應用的邏輯,如果這一行產生了問題,你該如何去做?而MyBatis的開發和調優更加方便簡單。

尤其是需要處理大量數據或者大併發情況的網站服務,這也阿里選擇MyBatis的原因。

阿里為什麼棄用hibernate?看完Mybatis源碼我黯然流淚了

MyBatis整體架構

大廠都在用MyBatis,跳槽的時候MyBatis更是面試必問的內容,那你對於MyBatis又掌握了多少呢?下面這5道阿里關於MyBatis的面試題,你能答上來幾道?

阿里為什麼棄用hibernate?看完Mybatis源碼我黯然流淚了

那麼如何學習MyBatis源碼呢?

市面上真正適合學習的MyBatis資料太少,有的書或資料雖然講得比較深入,但是語言晦澀難懂,大多數人看完這些書基本都是從入門到放棄。

學透MyBatis源碼難道就真的就沒有一種適合大多數同學的方法嗎?在這分享一個MyBatis源碼學習文檔,這份文檔從MyBatis源碼的角度分析Mapper綁定過程、SqlSession操作數據庫原理、插件實現原理等

共7個部分

第一部分:MyBatis 入門

MyBatis是什麼、為什麼要使用MyBatis、如何使用MyBatis、小結

阿里為什麼棄用hibernate?看完Mybatis源碼我黯然流淚了

第二部分:配置文件解析過程

配置文件解析過程分析,小結

阿里為什麼棄用hibernate?看完Mybatis源碼我黯然流淚了

第三部分:映射文件解析過程

映射文件解析解析入口、解析映射文件、Mapper接口綁定過程分析、處理未完成解析的節點、小結

阿里為什麼棄用hibernate?看完Mybatis源碼我黯然流淚了

第四部分:SQL執行流程

阿里為什麼棄用hibernate?看完Mybatis源碼我黯然流淚了

第五部分:內置數據源

內置數據源初始化過程、UnpooledDataSource、PooledDataSource、小結

阿里為什麼棄用hibernate?看完Mybatis源碼我黯然流淚了

第六部分:緩存機制

緩存類介紹、CacheKey、一級緩存、二級緩存、小結

阿里為什麼棄用hibernate?看完Mybatis源碼我黯然流淚了

第七部分:插件機制

插件機制原理、實現一個分頁插件、小結

阿里為什麼棄用hibernate?看完Mybatis源碼我黯然流淚了

由於篇幅限制,小編這裡只將此實戰文檔的所含內容全部展現出來了,需要獲取完整文檔用以學習的朋友們可以關注一下小編,後臺私信:“Mybaits”或者【資料】獲取免費領取方式!

阿里為什麼棄用hibernate?看完Mybatis源碼我黯然流淚了



分享到:


相關文章: