SqlSessionFacotry = new DefaultSqlSessionFactorybuilder.build(inputstream);
在通过DefaultSqlSessionFactorybuilder实例化DefaultSqlSessionFactory的时候,主要有一下几个流程:
读取二级缓存的配置 type eviction size flushInterval readonly blocking 等属性配置。
助手负责实例化一个 new cache() -- 建造者模式
助手负责把这个cache二级缓存对象加载到配置中心;
分别读取各个结果集,属性配置包括 id, type(oftype) autoMapper extends
把每一行的配置实例成一个resultmapping, 最终是一个List集合
通过resultMap.builder建造者模式,生成对应的resultmap。
助手负责吧该resultMap加载配置中心
5.xmlMapperBuilder解析
读取各个配置属性并生成一个mappedstatement对象,加载到配置中心去
sqlsession = sqlSessionFactory.openSession();
在opensession的过程中,mybatis从配置总读取evirenomtn配置(策略模式),实例化一个tx事务工厂,创建事务对象。
根据事务对象实例化一个executor对象,该执行器接口有三个实现类bachexecutor ,reuseexecutor,simplexecutor(默认),
如果配置中配置了二级缓存,则通过装饰器模式 new cachingExecutor(),最后p'luginAll
Imapper = sqlsession.getMapper(Imapper.class);
在getMapper的过程中,配置中心有一个mapper的注册中心Map
User = Imapper.findById(1);
Mapper代理对象在调用方法时候,MapperProxy中有一个缓存Map
根据mapmethod中sqlcommandType选择增删查改类型。
如果有参数,把参数解析成map类型
通过rowBound生成一个默认的分页
根据返回类型和参数类型选择sqlsession中的方法,
sqlsession从配置文件中的读取mapstatement对象,并交给executor执行。
根据namepace+id/分页/sql语句/参数获取二级缓存的hashcode,有二级缓存则返回该结果,没有则查数据库,把结果放入二级缓存。
baseexecutor根据一级缓存获取hashcode,没有缓存则查询数据库
通过statementhandler 指挥preparestatementhanlder生成preparstatement,获取链接资源,做日志的增强。占位符处理
通过statement查询数据库
通过resulthandler获取配置中心的结果映射规则,处理数据结果。