其实我本来是不打算写这个PageHelper的,但是后来想了想,还是写了吧!现在市场用Mybatis的产品分页应该差不多都是用PageHelper来实现的,毕竟Mybatis的分页rowbound...不说了之前说了,反正是没人用; 分页插件的使用: 中文文档:https://github.com/pagehelper/Mybatis-PageHelper/blob/master/README_zh.md 使用手册:https://github.com/pagehelper/Mybatis-Pa…
为了不把开发和源码分析混淆,决定分开写; 接下来分析一下插件的源码,说道这里老套路先说一个设计模式,他就是责任链模式 责任链模式:就是把一件工作分别经过链上的各个节点,让这些节点依次处理这个工作,和装饰器模式不同,每个节点都知道后继者是谁,适合为完成同一个请求需要多个处理类的场景; Handler:定义了一个处理请求的标准接口; ConcreteHandler:具体的处理者,处理他负责的部分,根据业务可以结束处理流程,也可以将请求转发给他的后继者; client:发送者,发起请求的客户端; 责任…
插件概述: 插件是用来改变或者扩展mybatis的原有功能,mybatis的插件就是通过继承Interceptor拦截器实现的,在没有完全理解插件之前j禁止使用插件对mybatis进行扩展,有可能会导致严重的问题; mybatis中能使用插件进行拦截的接口和方法如下: Executor(update,query,flushStatement,commit,rollback,getTransation,close,isClose); StatementHandler(prepare,paramet…
目录 零.一级缓存和二级缓存的流程 一级缓存总结 二级缓存总结 一.缓存接口Cache及其实现类 二.cache标签解析源码 三.CacheKey缓存项的key 四.二级缓存TransactionCache 五.二级缓存测试 六.一级缓存源码解析 七.测试一级缓存 前文传送门:mybatis源码学习:从SqlSessionFactory到代理对象的生成 零.一级缓存和二级缓存的流程 以这里的查询语句为例. 一级缓存总结 以下两种情况会直接在一级缓存中查找数据 主配置文件或映射文件没有配置二级缓存…
前文传送门: mybatis源码学习:从SqlSessionFactory到代理对象的生成 mybatis源码学习:一级缓存和二级缓存分析 下面这条语句,将会调用代理对象的方法,并执行查询过程,我们一起来看看它的内部是如何实现的. User user1 = userDao1.findById(41); 一.动态代理:执行代理对象的方法时拦截,进行方法增强. /** * 作用:执行被代理对象的任何接口方法都会经过该方法 * @param proxy : 代理对象的引用 * @param metho…
目录 一.自定义插件流程 二.测试插件 三.源码分析 1.inteceptor在Configuration中的注册 2.基于责任链的设计模式 3.基于动态代理的plugin 4.拦截方法的intercept(invocation) 四.插件开发插件pagehelper 1.引入相关依赖 2.全局配置 3.测试分页 五.插件总结 前文传送门: mybatis源码学习:从SqlSessionFactory到代理对象的生成 mybatis源码学习:一级缓存和二级缓存分析 mybatis源码学习:基于动…
最近这一周,主要在学习mybatis相关的源码,所以记录一下吧,算是一点学习心得 个人觉得,mybatis的源码,大致可以分为两部分,一是原生的mybatis,二是和spring整合之后的mybatis源码学习(也就是mybatis-spring这个jar包的相关源码),这边笔记,主要来学习原生mybatis: 还是先用描述一下,原生mybatis从解析xml到执行SQL的一个流程: 1.第一步:首先会通过sqlSessionFactoryBuilder来build一个SQLSessionFac…
今Executor这个类,Mybatis虽然表面是SqlSession做的增删改查,其实底层统一调用的是Executor这个接口 在这里贴一下Mybatis查询体系结构图 Executor组件分析 Executor是Mybatis的核心组件之一,定义了数据库操作最基本的方法,SqlSession的功能都是基于它实现的; 在分析这个之前先来说一下 大家不用想也知道 设计模式白,之前都是这么开始讲的,没错在这里我说一下模板模式 模板模式:一个抽象类公开定义了执行他方法的方式/模板,他的子类可以按需要…
简述 在数据持久层中,数据源是一个非常重要的组件,其性能直接关系到整个数据持久层的性能.在实践中比较常见的第三方数据源组件有Apache Common DBCP.C3P0.Proxool等,MyBatis不仅可以集成第三方数据源组件,还提供了自己的数据源实现. 常见的数据源组件都实现了javax.sql.DataSource接口,MyBatis自身实现的数据源实现也不例外.MyBatis提供了两个javax.sql.DataSource接口实现,分别是PooledDataSource和Unpoo…
源码学习到这里就要结束了; 来总结一下吧 Mybatis的总体架构 这次源码学习我们,学习了重点的模块,在这里我想说一句,源码的学习不是要所有的都学,一行一行的去学,这是错误的,我们只需要学习核心,专注重点,参考借鉴,这才是我们的目标; 第一天:日志模块学习 第二天:数据源模块学习 第三天:缓存模块学习 第四天:反射模块学习 第五天:核心流程学习 初始化 -> binding模块 -> SqlSession 第六天:核心流程学习  Executor 第七天:插件模块学习  插件开发原理 -&g…