以下以調用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並返回執行結果。