天天看點

【Mybatis源碼解析第三章】Mybatis的“邏輯”

緣起

想必經過前面兩章的回憶,你已經很清楚了Mybatis和jdbc的用法,下面我們正式進入到Mybatis的源碼解析中。

在閱讀源碼之前,有必要說一下Mybatis的整體運作邏輯,腦中有了一個大概的流程,才不容易迷失在源碼的海洋中。

Mybatis的“步驟”

我們把main入口處的代碼分為兩個部分

【Mybatis源碼解析第三章】Mybatis的“邏輯”
  1. 解析xml的配置檔案建構SqlSession對象,
  2. 執行SQL

從代碼上看似乎就這麼簡單,但其實内部會比這個要複雜一點,完整的步驟應該是這樣的

  1. 加載配置:配置來源于兩個地方,一處是配置檔案,一處是Java代碼的注解,将SQL的配置資訊加載成為一個個​

    ​MappedStatement​

    ​​對象(包括了傳入參數映射配置、執行的SQL語句、結果映射配置),然後把這個對象作為​

    ​value​

    ​​,把​

    ​mapper​

    ​​的​

    ​namespace+對應節點的id​

    ​​作為key儲存到​

    ​Configuration​

    ​​的m​

    ​appedStatements​

    ​屬性中,這是個map對象。
  2. SQL解析:當API接口層接收到調用請求時,會接收到傳入​

    ​SQL​

    ​​的​

    ​ID​

    ​​和傳入對象(可以是Map、JavaBean或者基本資料類型),​

    ​Mybatis​

    ​​會根據​

    ​SQL​

    ​​的​

    ​ID​

    ​​找到對應的​

    ​MappedStatement​

    ​​,然後根據傳入參數對象對​

    ​MappedStatement​

    ​​進行解析,解析後可以得到最終要執行的​

    ​SQL​

    ​語句和參數。
  3. SQL執行:将最終得到的​

    ​SQ​

    ​​L和參數使用​

    ​JDBC​

    ​的方式執行,得到操作資料庫的結果。
  4. 結果映射:将操作資料庫的結果按照映射的配置進行轉換,可以轉換成​

    ​HashMap、JavaBean​

    ​或者基本資料類型,并将最終結果傳回。