關於xml等解析的工具基本均包含在org.apache.ibatis.builder包中,有包名可知基本使用建造者模式。這個包的主要功能兩個:
1、解析XML配置文件和映射文件,xml子包中;
2、解析注解形式的mapper聲明,這部分功能在annotation中。
暫時僅分析xml配置文件方式的技術實現。
關於builder包中關於xml實現的UML圖如下:
測試案例代碼如下:
調試代碼,跟蹤xml解析過程及解析結果的保存:
一、代理對象的解析保存
1、
2、
3、
4、
5、
6、
7、
8、
二、MappedStatement解析保存(xxxmapper.xml解析)
1、
2、
3、
4、
5、
6、
三、數據源相關解析保存(datasource)
1、
2、
3、
以上將配置文件中數據源、sql及相應mapper的代理對象均保存在Configuration的屬性中,分別是MappedStatement、environment、MappedRegistry。以上三個屬性保證了對於數據庫的操作的基本功能,剩下的就是對數據的實際操作了。剩下的工作誰做呢?Executor。
Executor在sqlsession生成的過程中作為其屬性之一生成,具體如下:
關於執行器具體可參考https://www.cnblogs.com/ilovebath/p/14510697.html
那么這幾個分離的過程,怎么執行關聯一起執行數據庫的操作的呢?客戶端獲取mapper代理對象(https://www.cnblogs.com/ilovebath/p/14511932.html)后,執行invoke方法。invoke方法中使用executor執行鏈接數據庫、執行sql語句並返回結果映射。核心方法如下:
其中可以驗證:1、獲取數據庫鏈接
2、預處理sql語句
3、參數化處理