Lengxf_mybatis源码解析
2023-06-28 09:45:39 0 举报
Lengxf_mybatis源码解析
作者其他创作
大纲/内容
MappedStatement ms = configuration.getMappedStatement(statement);然后执行(CachingExecutor)executor.query()
使用JDK的动态代理生成MapperProxy对象
构建流程
解析注解类型的sql信息
执行器选择完毕后会对执行器进行插件的代理增强interceptorChain.pluginAll(executor);
SqlSession sqlSession = sqlSessionFactory.openSession()
MapperMethod#execute
使用环境的事务处理器TransactionFactory transactionFactory = getTransactionFactoryFromEnvironment(environment);
Configuration全局的配置类这里是前置配置解析的流程
DefaultSqlSession#selectList
核心入口SqlSessionFactory
执行流程
new DefaultSqlSessionFactory(config);
TransactionFactory事务工厂
MapperProxyFactory<T> mapperProxyFactory = (MapperProxyFactory<T>) knownMappers.get(type);mapperProxyFactory.newInstance(sqlSession)
每次执行前会先从缓存中查找结果集存在则直接返回不存在执行其他执行器的逻辑 执行增删改操作会移除缓存
typeAliasRegistry.registerAlias()类型别名注册
MapperProxy#invoke()
Environment运行环境配置
MapperRegistry#addMapper()注册映射关系这是一个核心方法
缓存key的生成方法org.apache.ibatis.executor.BaseExecutor#createCacheKey
DataSource数据源管理
SqlCommand.UPDATE
SqlCommand.INSERT
SqlCommand.FLUSH
SqlCommand.DELETE
font color=\"#323232\
Blog blog = mapper.selectBlog(101);代理类去执行方法
loadXmlResource();注入mapper.xml中的sql信息解析各种标签并把#{}解析为?进行占位
SqlCommand.SELECT
这个是三级缓存的概念如果开启缓存会进行一次缓存的包装executor = new CachingExecutor(executor);最终的执行逻辑还是上边的三种执行器
BaseExecutor抽抽象父类默认开启了二级缓存
解析完成后构建MappedStatement然后存在全局配置中configuration.addMappedStatement(statement)
new SqlSessionFactoryBuilder().build(configuration);
获取mapper代理类BlogMapper mapper = sqlSession.getMapper(BlogMapper.class);
收藏
收藏
0 条评论
下一页