MyBatis和hibernate誰優誰劣?一直都有爭論,這不,前幾天群裡關於這個話題,又吵起來了。
眾多過來人總結出來的經驗就是:hibernate確實厲害,但MyBatis學習成本低,使用簡單,能達到目的,不增加額外工作量(或很少增加),架構來說MyBatis功能單一,場景明確,耦合度低,無狀態,便於(放在業務代碼裡)分佈式部署。所以在大多數場景裡,MyBatis更適合。
為什麼阿里巴巴的持久層拋棄hibernate,採用MyBatis框架?
原因大概有以下4點:
- 阿里在mysql上下了大功夫,他們對數據查詢的要求也比較高,很多sql查詢都要精心設計。而hibernate把數據庫和你隔離了,如果使用hibernate,雖然能對生成的查詢進行一定程度的定製,但開發起來付出的代價更大。
- 對於阿里這種規模的網站服務,對cache的依賴是非常大的,對cache邏輯的要求非常高,而且一定要具體問題,具體優化。hibernate自帶的cache並不能滿足像阿里這樣的公司的需求。
- hibernate在你項目開始時候省事,但是會導致業務邏輯模型和數據庫模型互相依賴的程度太高,一旦項目變遷,隨便改一處數據庫的schema,整個java項目可能要改幾十處!而MyBatis的自動mapping做的也不差,開發起來也沒多花多少時間。等項目進入中後期,你需要大量定製和優化查詢的時候,MyBatis的開發效率就勝出了。
- 很多地方Hibernate可以強大到只用一行代碼解決很多問題,但比如說一個update()或者save()到底做了什麼,這裡既有hibernate本身的邏輯,也有你應用的邏輯,如果這一行產生了問題,你該如何去做?而MyBatis的開發和調優更加方便簡單。
尤其是需要處理大量數據或者大併發情況的網站服務,這也阿里選擇MyBatis的原因。
大廠都在用MyBatis,跳槽的時候MyBatis更是面試必問的內容,那你對於MyBatis又掌握了多少呢?下面這5道阿里關於MyBatis的面試題,你能答上來幾道?
那麼如何學習MyBatis源碼呢?
市面上真正適合學習的MyBatis資料太少,有的書或資料雖然講得比較深入,但是語言晦澀難懂,大多數人看完這些書基本都是從入門到放棄。
學透MyBatis源碼難道就真的就沒有一種適合大多數同學的方法嗎?在這分享一個MyBatis源碼學習文檔,這份文檔從MyBatis源碼的角度分析Mapper綁定過程、SqlSession操作數據庫原理、插件實現原理等共7個部分
第一部分:MyBatis 入門
MyBatis是什麼、為什麼要使用MyBatis、如何使用MyBatis、小結
第二部分:配置文件解析過程
配置文件解析過程分析,小結
第三部分:映射文件解析過程
映射文件解析解析入口、解析映射文件、Mapper接口綁定過程分析、處理未完成解析的節點、小結
第四部分:SQL執行流程
第五部分:內置數據源
內置數據源初始化過程、UnpooledDataSource、PooledDataSource、小結
第六部分:緩存機制
緩存類介紹、CacheKey、一級緩存、二級緩存、小結
第七部分:插件機制
插件機制原理、實現一個分頁插件、小結
由於篇幅限制,小編這裡只將此實戰文檔的所含內容全部展現出來了,需要獲取完整文檔用以學習的朋友們可以關注一下小編,後臺私信:“Mybaits”或者【資料】獲取免費領取方式!
閱讀更多 JavaSpring高級進階 的文章