Mybatis源码阅读 之 玩转Executor】的更多相关文章

承接上篇博客, 本文探究MyBatis中的Executor, 如下图: 是Executor体系图 本片博客的目的就是探究如上图中从顶级接口Executor中拓展出来的各个子执行器的功能,以及进一步了解Mybatis的一级缓存和二级缓存 预览: BaseExecutor :实现了Executor的全部方法,包括对缓存,事务,连接提供了一系列的模板方法, 这写模板方法中留出来了四个抽象的方法等待子类去实现如下 protected abstract int doUpdate(MappedStateme…
从前面分析我们知道了sql的具体执行是通过调用SqlSession接口的对应的方法去执行的,而SqlSession最终都是通过调用了自己的Executor对象的query和update去执行的.本文就分析下sql的执行器-----Executor Executor是mybatis的sql执行器,SqlSession是面向程序的,而Executor则就是面向数据库的,先看下Executor接口的方法有哪些,源码如下: public interface Executor { ResultHandle…
Mybatis源码分析: 1.配置文件解析: 1.1源码阅读入口: org.apache.ibatis.builder.xml.XMLConfigBuilder.parse(); 功能:解析全局配置文件,调用parse.evalNode()方法,将指定路径的config配置文件转换为XNode对象,然后调用parseConfiguration()方法逐步解析配置文件中的各个节点: 1.2 mapperElement():解析mappers标签,解析过程中就是对映射文件的解析过程 2. Mappe…
这一篇文章主要是记录Mybatis的动态代理学习成果,如果对源码感兴趣,可以看一下上篇文章  https://www.cnblogs.com/ChoviWu/p/10118051.html 阅读本篇的读者应该都已经了解了用mapper调用xml下的内容是利用动态代理,本文将对这一部分的源码一探究竟 我们都知道,spring用bean注入的方式是以代理的方式注入的,那么当mapper调用更下游的(xml)的服务的时候,这个操作是怎么运作的呢? 在spring初始化bean的时候Sqlsession…
mybatis框架在操作数据的时候,离不开SqlSession接口实例类的作用.可以说SqlSession接口实例是开发过程中打交道最多的一个类.即是DefaultSqlSession类.如果笔者记得没有错的话,早期是没有什么getMapper方法的.增删改查各志有对应的方法进行操作.虽然现在改进了很多,但是也保留了很多.我们依旧可以看到类似于selectList这样子的方法.源码的例子里面就可以找到.如下 SqlSession session = sqlMapper.openSession(T…
第一天阅读源码及创建时序图.(第一次用prosson画时序图,挺丑..) 1.  调用 SqlSessionFactoryBuilder 对象的 build(inputStream) 方法: 2.  SqlSessionFactoryBuilder 会根据输入流 inputStream 等信息创建XMLConfigBuilder 对象 ; 3.  SqlSessionFactoryBuilder 调用 XMLConfigBuilder 对象的 parse() 方法: 4.  XMLConfigB…
说明 读了3遍:https://my.oschina.net/zudajun/blog/665956 现在统一整理成笔记 并跟着源码一行一行调试 统一整理起来 SqlSession 接口定义 public interface SqlSession extends Closeable { <T> T selectOne(String var1); <T> T selectOne(String var1, Object var2); <E> List<E> se…
本文将主要介绍 Executor 的整体结构和各子类的功能,并对比效率: 一.Executor 主体结构 1. 类结构 executor 的类结构如图所示: 其各自的功能: BaseExecutor:基础执行器,封装了子类的公共方法,包括一级缓存.延迟加载.回滚.关闭等功能: SimpleExecutor:简单执行器,每执行一条 sql,都会打开一个 Statement,执行完成后关闭: ReuseExecutor:重用执行器,相较于 SimpleExecutor 多了 Statement 的缓…
说明 mybatis初始化过程 就是解析xml到封装成Configuration对象 供后续使用 SqlSessionFactoryBuilder 代码例子 SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder(); SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder .build(ClassLoader.getSy…
六个基本工具图集 图片来源:https://my.oschina.net/zudajun/blog/668596 ObjectFactory 类图 接口定义 public interface ObjectFactory { void setProperties(Properties var1); <T> T create(Class<T> var1); <T> T create(Class<T> var1, List<Class<?>>…