Mybatis运行原理

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
在这里插入图片描述

查询流程总结

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值