Mybatis Plus動態代理原始碼分析
阿新 • • 發佈:2022-03-14
以下以呼叫baseMapper的selectById為例,剖析Mybatis plus的執行邏輯。
總體來看,Mybatis plus通過兩層JDK動態代理的方式,實現了SQL的執行。
第一層動態代理為:MybatisMapperProxy,內部獲取到了SqlSessionInterceptor;
第二層動態代理為:SqlSessionInterceptor,內部真正的建立了SqlSession來執行SQL並返回。
1、主入口:
此時會通過JdkDynamicAopProxy通過反射的方式,呼叫MybatisMapperProxy,此類為所有Mybatis plus SQL執行的主入口。
2、MybatisMapperProxy為JDK動態代理,呼叫MybatisMapperMethod方法的execute方法。
3、MybatisMapperMethod的execute執行邏輯為,呼叫SqlSessionTemplate的selectOne方法,其內部通過呼叫sqlSessionProxy來代理執行selectOne方法。 代理類為SqlSessionInterceptor。
4、代理類的執行邏輯為:通過SqlSessionFactory建立SqlSession(DefaultSqlSession),然後呼叫對應的selectOne方法,最後commit SqlSession並返回執行結果。