如图所示:这一行的代码主要是用于实现xml文件解析操作,对于mybatis核心xml文件的解析操作,以及里面的mapper.xml文件解析操作。
如图所示表示对于mapper相关的xml文件进行解析操作
如果所示会进行接口相关解析操作,并创建代理之后放入到一个map中,通解析mapper上面的注解sql语句或mapper相关xml文件中相关sql语句(注意:xml解析是放在了parser.parse操作)
-------------------------------------------以上完成整个mybatis相关配置文件的加载过程
如图根据之前创建完成sqlSessionFactory(即:DefaultSqlSessionFactory类对象)对象实现对于session对象的创建
在事务下之创建一个session,注意这里的事务可以spring的事务相关结合,同时这里的session会创建一个Executor对象由它实现对于数据相关的核心操作
所有的excutor实现类都实现了这个接口,注意这里的update方法,完成是对于数据的增,删,改操作的公用接口
此处完成真正的mapper接口相关的代理对象的真正的创建即MapperProxyFactory实例对象
以上将通过上述创建的mapper代理对象执行相关的sql操作
通过PlainMethodInvoker对象,即一个方法执行的过程中就会一个对象,由此中的MapperMethod对象完成对于数据库的真正操作
如图所示为MapperMethod中的核心方法的相关操作
最终方法都是会走到Executor相关的实现类的,将获取的到数据放入到一级缓存中,如图所示
需要注意的是如果是开启二级缓存的话那么会走CachingExecutor实现类这个,流程是先到二级缓存(基于命名空间的,即一个命名空间公用一个二级缓存区间)找,如果二级缓存中没有之后到BaseExecutor中,之后走一级缓存,如果一级缓存也没有那么将会走具体的sql语句执行的相关的查询语句操作
----------------------------------------------------那么mybatis是如何构建二级缓存的呢?下面将介绍其流程
如图,即之前解析xml或者注解操作方法的时候(即:mapperElement(root.evalNode("mappers"));),同时也会对于二级缓存实现创建操作,此时完成对于每一个命名空间二级缓存的构建
上面的方法是将会创建一个key,通过这个获取对应的命名空间的二级缓存的数据
--------------------------------------------------------------------------------------------------mybatis二级缓存相关构建操作流程,我觉的二级缓存这一块设计的并怎样,原因在在于两点1.每次查询都会创建CacheExcutor对象之后再调用BaseExcutor,但是二级缓存大部分情况之下是没有开启的(默认情况之下也是)2.通过前面通过许多逻辑操作生成对应的CacheKey最后判断cache为空,这里不是应该一开始就判断二级缓存是否开启吗?
大致讲了一些mybatis源码相关时候入门,但是不是适合深入研究.(推荐从它开始)
https://www.cnblogs.com/xrq730/category/994185.html
-------------------------------------------------------到此,mybatis最基本的xml配置方式工作流程图结束