1. 程式人生 > >Mybatis源碼分析(原創)

Mybatis源碼分析(原創)

們的 family nbsp build 9.png 當我 圖片 一級緩存 ont

@test

技術分享圖片

1.進入SqlSessionFactoryBuilderbuild方法

技術分享圖片

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.xmlselect屬性

技術分享圖片

此時我們通過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源碼分析(原創)