十年老架構師神級推薦,MyBatis源碼分析,再也不用為源碼擔憂了

十年老架構師神級推薦,MyBatis源碼分析,再也不用為源碼擔憂了

前言

MyBatis是一個優秀的持久層ORM框架,它對jdbc的操作數據庫的過程進行封裝,使開發者只需要關注SQL 本身,而不需要花費精力去處理例如註冊驅動、創建connection、創建statement、手動設置參數、結果集檢索等jdbc繁雜的過程代碼。

Mybatis通過xml或註解的方式將要執行的statement配置起來,並通過java對象和statement中的sql進行映射生成最終執行的sql語句,最後由mybatis框架執行sql並將結果映射成java對象並返回。

為什麼要掌握MyBatis?

Mybatis之所以流行的一個原因是上手快,當學完JDBC之後,再去學習Mybatis,上手時間要比Hibernate快。一個技術學習成本低,也是一個優勢,畢竟企業招人是讓員工幫他寫代碼的,基本不會給出太多時間讓員工去學習(資本家)。

另外一個原因就是sql優化上了,業務複雜的sql語句通常需要進行優化,此時操作Mybatis更加容易一些。

現在spring boot和Mybatis plus的出現,使Mybatis使用起來更加簡單了。

所以在大多數場景裡,MyBatis更適合。

為什麼現在面試都要問源碼?

因為這能體現一個面試者是否愛鑽研,是否願意深入原理。而企業需要的恰恰是這樣的人!

而且看源碼我覺得有以下好處:

1)可以從源碼中學習比如我們看JDK的源碼,其中會有很多關於性能優化、防併發的例子,還有很多地方用了設計模式,這些都是很好的可以用來學習的代碼。對於初學者來說,很多代碼格式、命名等都是需要學習的,最好的辦法就是通過開源代碼來學習。

2)深入源碼才能懂得原理有的時候,我們使用的第三方的框架,中間件等,我們要想了解他們的原理,最有效的辦法就是直接看源碼。源碼是不會騙人的。

3)更好的解決問題只要是人寫的代碼,就可能存在bug,別人的開源代碼也一樣,通過閱讀源代碼可以更好的定位和解決問題。

4)為了找工作

十年老架構師神級推薦,MyBatis源碼分析,再也不用為源碼擔憂了

mybatis源碼思維腦圖

大廠都在用MyBatis,跳槽的時候MyBatis更是面試必問的內容,那你對於MyBatis又掌握了多少呢?

下面這5道阿里關於MyBatis的面試題,你能答上來幾道?

  1. 源碼中用了哪些設計模式?為什麼要用這些設計模式?
  2. MyBatis打開調試模式之後,能打印sql語句等信息,這是怎麼實現的?實現過程中使用了什麼設計模式?
  3. MyBatis是如何為二級緩存動態添加日誌、同步控制、阻塞、緩存淘汰策略等附加能力的?用了什麼設計模式?
  4. 請描述從數據庫連接池獲取一個數據連接的過程;
  5. 什麼是緩存雪崩?如何解決?

怎麼才能更好地掌握MyBatis

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

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

這是一份完整的《Mybatis源碼分析.PDF》文檔,請看完下面的章節的簡單介紹,有需要可以私信【mybatis】獲取領取文檔方式。

第一部分:MyBatis的使用

第一部分介紹了MyBatis的一些背景知識,並比較了JDBC、SpringJDBC、Hibernate和 MyBatis

等 4 種持久層技術的優缺點,以及各自的使用場景。最後演示了單獨使用 MyBatis,和在

Spring 中使用 MyBatis 等兩種不同的方式。總的來說,內容應該較為充分的解答了

MyBatis 是什麼,為何要使用,以及如何使用這三個問題。

  • MyBatis是什麼
  • 為什麼要使用MyBatis
  • 如何使用MyBatis
十年老架構師神級推薦,MyBatis源碼分析,再也不用為源碼擔憂了

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

我們在使用 MyBatis 框架時,通常會進行一定的設置,使其能更好的滿足我們的需求。對於一個框架來說,提供較為豐富的配置文件,也是其靈活性的體現。這部分將會介紹 MyBatis 配置文件中的大部分節點解析過程,包含但不限於 properties、settings、typeAliase、typeHandlers 等。

  • 解析節點
  • 解析節點
  • 設置內容到 Configuration 中
  • 解析節點
  • 解析節點
  • 解析節點
  • 解析節點
十年老架構師神級推薦,MyBatis源碼分析,再也不用為源碼擔憂了

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

這部分會分析一下映射文件解析的過程。與配置文件不同,映射文件用於配置 SQL語句,字段映射關係等。映射文件中包含、、、、

  • 映射⽂件解析解析⼊口
  • 解析映射⽂件
  • Mapper 接⼜綁定過程分析
  • 處理未完成解析的節點
十年老架構師神級推薦,MyBatis源碼分析,再也不用為源碼擔憂了

第四部分:SQL 執⾏流程

這部分將對 MyBatis 執行 SQL 的過程進行較為詳盡的分析。該過程比較複雜,涉及的技術點很多。包括但不限於以下技術點:

  • 為 mapper 接口生成實現類
  • 根據配置信息生成 SQL,並將運行時參數設置到 SQL 中
  • 一二級緩存的實現
  • 插件機制
  • 數據庫連接的獲取與管理
  • 查詢結果的處理,以及延遲加載等
十年老架構師神級推薦,MyBatis源碼分析,再也不用為源碼擔憂了

第五部分:內置數據源

這部分將向大家介紹 MyBatis 內置數據源的實現邏輯。MyBatis 支持三種數據源配置,分別為 UNPOOLED、POOLED 和 JNDI。並提供了兩種數據源實現,分別是UnpooledDataSource 和 PooledDataSource 。 在這三種數據源配置中, UNPOOLED 和 POOLED 是我們最常用的兩種配置,這兩種數據源也是本章要重點分析的對象。至於 JNDI,MyBatis 提供這種數據源的目的是為了讓其能夠運行在 EJB 或應用服務器等容器中,這一點官方文檔中有所說明。

  • 內置數據源初始化過程
  • UnpooledDataSource
  • PooledDataSource
十年老架構師神級推薦,MyBatis源碼分析,再也不用為源碼擔憂了

第六部分:緩存機制

在 MyBatis 中,Cache 是緩存接口,定義了一些基本的緩存操作,所有緩存類都應該實現該接口。 MyBatis 內部提供了豐富的緩存實現類,比如具有基本緩存功能的PerpetualCache ,具有 LRU 策略的緩存 LruCache ,以及可保證線程安全的緩存SynchronizedCache 和具備阻塞功能的緩存 BlockingCache 等。除此之外,還有很多緩存實現類,這裡就不一一列舉了。需要特別說明的是,MyBatis 在實現緩存模塊的過程中,使用了裝飾模式。在以上幾種緩存實現類中, PerpetualCache 相當於裝飾模式中的ConcreteComponent。LruCache、SynchronizedCache 和 BlockingCache 等相當於裝飾模式中的 ConcreteDecorator。它們的關係如下:

十年老架構師神級推薦,MyBatis源碼分析,再也不用為源碼擔憂了

以上對 Cache 接口的實現類進行了簡單的介紹,接下來,我們一起深入到源碼中,看看這些緩存類的實現。

十年老架構師神級推薦,MyBatis源碼分析,再也不用為源碼擔憂了

第七部分:插件機制

一般情況下,開源框架都會提供插件或其他形式的拓展點,供開發者自行拓展。這樣的好處是顯而易見的,一是增加了框架的靈活性。二是開發者可以結合實際需求,對框架進行拓展,使其能夠更好的工作。以 MyBatis 為例,我們可基於 MyBatis 插件機制實現分頁、分表,監控等功能。由於插件和業務無關,業務也無法感知插件的存在。因此可以無感植入插件,在無形中增強功能。

十年老架構師神級推薦,MyBatis源碼分析,再也不用為源碼擔憂了

當然還有搭配的視頻教程,需要文檔以及視頻可轉發+關注後私信回覆【mybatis】獲取免費領取方式。


分享到:


相關文章: