1。Spring的pom.xml添加MyBatis起步依赖,查看启动配置MybatisAutoConfiguration类,添加MybatisProperties类,对应项目配置中的mybatis.***相应配置添加。
2。MybatisAutoConfiguration中注入SqlSessionFactory,设置SqlSessionFactory的dataSource,configuration。
重点----- a):SqlSessionFactory是通过SqlSessionFactoryBean.getObject()获取,在SqlSessionFactoryBean.afterPropertiesSet()方法中会创建SqlSessionFactoryBean,在这里面会解析mybatis-config.xml与项目配置中文件中的mapperLocations:
SqlSessionFactoryBean.buildSqlSessionFactory()->
XMLConfigBuilder.parse(),解析mybatis-config.xml配置
XMLMapperBuilder.parse(),解析mapperLocations映射类
3。MybatisAutoConfiguration中注入SqlSessionTemplate
4。DataSourceAutoConfiguration配置类是在SpringBoot的AutoConfi中注入,添加DataSourceProperties配置类。对应项目配置中的spring.datasource.***相应配置
5。通过@MapperScan注解导入相应路径下的Mapper Interface类。在MapperScannerRegistrar类中通过ClassPathMapperScanner.processBeanDefinitions()方法将相应MapperInterface注入,类型为MapperFactoryBean
6。获取相应MapperInterface接口类的Bean时通过MapperFactoryBean.getObject()方法。获取的是相应的代理对像MapperProxy,通过MapperProxyFactory生成。
7。调用相应的接口中的方法时就会获取MapperInteface的代理对像MapperProxy。通过MapperProxy.invoke执行相应的方法。MapperProxy.invoke->MapperMethod.execute(SqlSession, Object[])然后一步一步往下。
部分细节清单:
1.
Mybatis的执行器有三种:
SimpleExecutor,每次执行完关闭Statement
BatchExecutor,支持批量
ReuseExecutor,同一个Sql的情况下Statement会复用
2.
StatementHandler有三类:
SimpleStatementHandler
PreparedStatementHandler
CallableStatementHandler
3.分页可以在StatementHandler中的RowBounds,不过此种方法属于内存分页
4.Mybatis的缓存,默认一级缓存在BaseExecutor中的PerpetualCache localCache,Session级别。查询不会清除,delete/update会清空
5.自定义插件:
1):首先在mybatis-config.xml文件中配置plugins节点
2):一个实现Interceptor接口的自定义方法
后面interceptorChain.pluginAll获取经过插件增强的
parameterHandler,
resultSetHandler
statementHandler
6.Mapper Interface类的方法名应与Mapper**.xml文件中的ID一致,因为后面要通过Mapper Interface的方法名从configuration.getMappedStatement(statement)获取对应的MappedStatement语句。
7.配置文件中的mappers节点有packages与mapper类。
mapper下的节点又分resource,url,class。顺序为1):resource,2):url,
3):class
角色的过程在XMLConfigBuilder.parseConfiguration(parser.evalNode("/configuration"))中,可自行细看。