当前位置:   article > 正文

Mybatis运行原理_flushstatements commit

flushstatements commit

MyBatis工作原理

在这里插入图片描述

在这里插入图片描述
Mybatis四大对象:

  1. Executor 执行器(update ,query, flushStatements, commit, rollback, getTransaction, close, isClosed)
  2. ParameterHandler 参数处理器(getParameterObject, setParameters)
  3. ResultSetHandler 结果集处理器(handleResultSets, handleOutputParameters)
  4. StatementHandler sql语句的处理器(prepare, parameterize, batch, update , query)

执行过程四大步骤:

  1. 获取sqlSessionFactory对象
  2. 获取sqlSession对象
  3. 获取的接口的实现类对象
  4. 调用接口方法

1. 根据配置创建SQLSessionFactory

调用sqlSession的build方法

在这里插入图片描述
在这里插入图片描述

创建XMLConfigBuilder,xml配置的构建器,解析

parser是一个XPathParser,做一个基于Dom4j的XPath解析工具
在这里插入图片描述

parser.parse()

在这里插入图片描述
在这里插入图片描述

this.parser.evalNode

计算configuration节点,这个configuration节点呢就是我们全局配置文件中的

那this.parseConfiguration又干了什么呢

在这里插入图片描述
上面这里就是解析mybatis-config.xml里面的内容

接着this.settingsElement(setting)

从properties中获取每一个全局能设置的项,并保存在configuration这个对象中
在这里插入图片描述

this.mapperElement(root.evalNode(“mappers”));

解析mappers标签
在这里插入图片描述
源码解析mappers标签
在这里插入图片描述

在这里插入图片描述
举例解析select|insert|update|delete
在这里插入图片描述
statementParser.parseStatementNode();
在这里插入图片描述

builderAssistant.addMapperdStatement方法返回MapperStatement对象
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

2. 获取sqlSession对象

在这里插入图片描述
CTRL+ALT+B 查看实现类的方法
在这里插入图片描述
注意这个configuration
在这里插入图片描述
里面的defaultExecutorType
在这里插入图片描述
SIMPLE就是一个简单的执行器
REUSE就是一个可复用的执行器
BATCH批量操作的执行器

在这里插入图片描述
先是getEnvironment获取到环境对象
创建事务
创建Executor对象

在这里插入图片描述
这里根据Executor在全局配置中的类型创建出BatchExecutor | ReuseExecutor | SimpleExecutor CachingExecutor实际上用的还是executor只是简单的包装了一下
interceptorChain.pluginAll(executor) 拦截器链的方法

在这里插入图片描述
拿到所有的拦截器,拿到每一个拦截器,调用每一个拦截器的plugin方法
把目标对象进行包装
alt + 7 查看 Executor的所有方法
在这里插入图片描述
ctrl + alt + b查看实现类
在这里插入图片描述
在这里插入图片描述

3. 获取接口的实现类对象

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
MapperRegistry的getMapper方法
在这里插入图片描述
this.kownMappers.get(type)根据接口类型获取MapperProxyFactory
然后调用newInstance(sqlSession)
在这里插入图片描述
动态代理创建
在这里插入图片描述

4.查询流程

上面的动态代理方法执行查询语句详细分析
在这里插入图片描述
这里判断method是不是jdk的Object方法,如果是jdk的方法就直接执行,如果不是就执行 this.cachedMapperMethod(method) 进行包装成一个MapperMethod,然后执行
在这里插入图片描述
在这里插入图片描述
selectOne其实就是查的selectList,只是取到List的第一个元素
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


getBoundSql代表sql语句的详细信息
在这里插入图片描述

上面获取MappedStatement
在这里插入图片描述

查询流程总结

在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/158277
推荐阅读
相关标签
  

闽ICP备14008679号