緣起
想必經過前面兩章的回憶,你已經很清楚了Mybatis和jdbc的用法,下面我們正式進入到Mybatis的源碼解析中。
在閱讀源碼之前,有必要說一下Mybatis的整體運作邏輯,腦中有了一個大概的流程,才不容易迷失在源碼的海洋中。
Mybatis的“步驟”
我們把main入口處的代碼分為兩個部分
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI0gTMx81dsQWZ4lmZf1GLlpXazVmcvwFciV2dsQXYtJ3bm9CX9s2RkBnVHFmb1clWvB3MaVnRtp1XlBXe0xCMy81dvRWYoNHLwEzX5xCMx8FesU2cfdGLwMzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5CN0QzN5YmNhJTZkNWNzU2YxYzXxIjM0YDMxMzLcJTMxIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.png)
-
- 解析xml的配置檔案建構SqlSession對象,
- 執行SQL
從代碼上看似乎就這麼簡單,但其實内部會比這個要複雜一點,完整的步驟應該是這樣的
-
- 加載配置:配置來源于兩個地方,一處是配置檔案,一處是Java代碼的注解,将SQL的配置資訊加載成為一個個
對象(包括了傳入參數映射配置、執行的SQL語句、結果映射配置),然後把這個對象作為MappedStatement
,把value
的mapper
作為key儲存到namespace+對應節點的id
的mConfiguration
屬性中,這是個map對象。appedStatements
- SQL解析:當API接口層接收到調用請求時,會接收到傳入
的SQL
和傳入對象(可以是Map、JavaBean或者基本資料類型),ID
會根據Mybatis
的SQL
找到對應的ID
,然後根據傳入參數對象對MappedStatement
進行解析,解析後可以得到最終要執行的MappedStatement
語句和參數。SQL
- SQL執行:将最終得到的
L和參數使用SQ
的方式執行,得到操作資料庫的結果。JDBC
- 結果映射:将操作資料庫的結果按照映射的配置進行轉換,可以轉換成
或者基本資料類型,并将最終結果傳回。HashMap、JavaBean