Mybatis源碼分析(原創)
@test
1.進入SqlSessionFactoryBuilder中build方法
2.進入XMLConfigBuilder類中parse->parseConfiguration中 通過該方法去解析mybatis-config.xml
3.在mapperElement方法去解析我們的<mapper resource="mybatis/UserMapper.xml"/> 我們在導入mapper時有三種方法 resource url class
4.通過parseConfiguration方法解析好的xml中的數據返回到Configuration中存儲 下面為部分代碼
5.接下來在Test類中看到 我們進入openSession方法
在openSessionFromDataSource中通過configuration.getDefaultExecutorType()傳入執行器類型 默認SIMPLE(簡單) reuse(復用) BATCH(批量)
在openSessionFromDataSource方法中 去創建事物 並且獲得我們的執行器newExecutor
在執行器中找到我們默認的SIMPLE 通過executor = new CachingExecutor(executor);
設置一級緩存(此處默認開啟一級緩存 僅用於session範圍 )
mybatis一級緩存二級緩存學習資料(https://www.cnblogs.com/happyflyingpig/p/7739749.html)
6.接下來在Test類中看到 我們進入selectOne方法
在MappedStatement類中去分裝Mapper.xml中select屬性
此時我們通過selectList進入query 再進入getBoundSql 該方法去獲得我們的sql語句和相關的參數
在query方法中 通過createCacheKey創建緩存的key(自動緩存)
此處給sql創建一個key id+sql+limit+offsetxxx
在query返回結果中再次調用query去查我們的緩存 key 如果為空則去數據庫中查找 否則走緩存
當我們去查數據庫時通過queryFromDatabase 進入doQuery方法中
在該方法中拿到我們上面做好的Configuration信息
進入newStatementHandler請求相關的責任鏈的方式(攔截器)
doQuery方法中handler調用query 此時底層調用的jdbc
此時返回resultSetHandler 數據庫結果集
此時multipleResults中 存儲著從數據庫中查出來的數據
Mybatis源碼分析(原創)