18將至,對各大電商平台又是一大考驗。面對618、雙11流量洪峯,阿里京東都用了哪些技術?今天我們聊聊阿里的持久層選擇。眾所周知,阿里巴巴的持久層選擇了MyBatis框架。但是根據JVM生態系統報告,在ORM框架中使用MyBatis的佔比僅有6%!大量國外企業和開發者,更傾向於使用Hibernate。MyBatis似乎只在國內流行?
ORM使用狀況
相信很多人都用過hibernate,你覺得它與MyBatis哪個更優秀呢?
阿里巴巴的持久層為什麼選擇MyBatis?如果換成hibernate,能否扛住618、雙11?
關於這些疑問,也和很多同事討論過,最後還是阿里的一位大神給出了答案:
阿里在mysql上下了大功夫,對數據查詢的要求也比較高,很多sql查詢都要精心設計;
阿里這種scale的網站服務,對cache的依賴是非常大的,對cache邏輯的要求非常高,而且一定要具體問題,具體優化。hibernate自帶的cache並不能滿足像阿里這樣的公司的需求;
hibernate在你項目開始時候省事,但是會導致業務邏輯模型和數據庫模型互相依賴的程度太高,一旦項目變遷,隨便改一處數據庫的schema,整個java項目可能要改幾十處!而MyBatis的自動mapping做的也不差,開發起來也沒多花多少時間。等項目進入中後期,你需要大量定製和優化查詢的時候,MyBatis的開發效率就勝出了。
很多地方Hibernate可以強大到只用一行代碼解決很多問題,但比如説一個update()或者save()到底做了什麼,這裏既有hibernate本身的邏輯,也有你應用的邏輯,如果這一行產生了問題,你該如何去做?而MyBatis的開發和調優更加方便簡單。
阿里如果用hibernate,平時還好,趕上618、雙十一這種大促,那只有死路一條了。所以阿里巴巴的持久層拋棄hibernate,採用了MyBatis框架。Mybatis簡單高效, 學習成本低,很少增加工作量;架構來説功能單一,場景明確,耦合度低,無狀態,面向sql 語句的,便於在業務代碼裏分佈式部署,優化起來也方便,非常符合現在的開發節奏。
但是很多工作3、5年的程序員,對於MyBatis的諸多妙用依然一知半解。MyBatis其實學習起來不難,但是自行學習的話很容易遇到各種問題,比如導入MyBatis源碼時報錯;一對多查詢時,只查詢到一條或部分數據等所以在這我整理MyBatis從入門到源碼深入學習的系統筆記,可以説很全面了!
總目錄章節
不多説,先展示總目錄
第一部分:自定義持久層框架
第二部分Mybatis相關概念
第三部分Mybatis基本應用
第四部分:Mybatis配置文件深入
第五部分Mybatis複雜映射開發