Mybatis笔记

Mybatis是一个orm半自动化框架,目前在用以及学习次框架,所以追着代码研究Mybatis的一些原理,在此记录下笔记。

*mybatis初始化Configuration
这里没做过多研究,但之前有前辈的文章已经解析得很好了
http://blog.csdn.net/luanlouis/article/details/37744073

*把Mapper接口注册为bean,由Spring管理


Paste_Image.png

MapperScannerConfigurer.postProcessBeanDefinitionRegistry-->
ClassPathMapperScanner.scan-->doScan
依次将此包下的mapper进行注册bean


Mybatis笔记_第1张图片
Paste_Image.png

Mybatis与数据库的交互方式有两种:
一种是传入statementId,有sqlsession执行相关操作
一种是直接调用mapper(实际还是sqlsession 执行相关操作)
有两种方式配置mapper.xml:
1.在SqlSessionFactoryBean配置mapperLocations


Mybatis笔记_第2张图片
Paste_Image.png

2.在上图中的mybatis.cfg.xml配置mapper节点:

Paste_Image.png

*为mapper设置代理
在初始化的Configuration的过程中,会将mapper.xml文件进行解析,最终是XMLMapperBuilder类来解析。
XMLMapperBuilder.parse-->buildMapperForNamespace-->
Configuration.addMapper-->MapperRegistry.addMapper

Mybatis笔记_第3张图片
Paste_Image.png
Mybatis笔记_第4张图片
Paste_Image.png

由上图可知,最终是将namespace对应的类(Mapper接口),以键值对保存在MapperRegistry的knownMappers中,请注意,而值是一个改类所对应的代理工厂MapperProxyFactory
下面来看看,当spring获取mapper依赖的时候:
MapperFactoryBean.getObject

Paste_Image.png

MapperRegistry.getMapper

Mybatis笔记_第5张图片
Paste_Image.png

最终返回的是一个代理

Mybatis笔记_第6张图片
Paste_Image.png

顺着源码一步步看,最终还是由sqlsession,查询MappedStateMent,调用Executor来执行相关命令

Mybatis笔记_第7张图片
Paste_Image.png
Mybatis笔记_第8张图片
Paste_Image.png
Mybatis笔记_第9张图片
Paste_Image.png

此图是实现sqlSession接口的DefualtSqlSession类的方法

Mybatis笔记_第10张图片
Paste_Image.png

以上纯属个人笔记,如有错误,请指导改正

你可能感兴趣的:(Mybatis笔记)