MyBatis 插件原理与自定义插件-PageHelper 原理
(基于spring-mybatis)PageInterceptor 类
1、用法(EmployeeController. getEmpsWithJson())
PageHelper.startPage(pn, 10);
List<Employee> emps = employeeService.getAll();
PageInfo page = new PageInfo(emps, 10);
先看PageHelper jar 包中PageInterceptor 的源码。拦截的是Executor 的两个query()方法。在这里对SQL 进行了改写:
//调用方言获取分页sql
String pageSql = dialect.getPageSql(ms, boundSql, parameter, rowBounds, pageKey);
跟踪到最后,是在MySqlDialect. getPageSql()对SQL 进行了改写,翻页参数是从一个Page 对象中拿到的,那么Page 对象是怎么传到这里的呢?
上一步,AbstractHelperDialect. getPageSql()中:
Page page = getLocalPage();
return getPageSql(sql, page, pageKey);
Page 对象是从一个ThreadLocal<>变量中拿到的,那它是什么时候赋值的?
回到EmployeeController. getEmpsWithJson()中,PageHelper.startPage()方法,把分页参数放到了ThreadLocal<>变量中。
protected static void setLocalPage(Page page) {LOCAL_PAGE.set(page);
}
关键类总结:
对象 | 作用 |
PageInterceptor | 自定义拦截器 |
Page | 包装分页参数 |
PageInfo | 包装结果 |
PageHelper | 工具类 |
MyBatis 插件原理与自定义插件-PageHelper 原理相关推荐
- MyBatis 插件原理与自定义插件-插件编写与注册
(基于spring-mybatis)运行自定义的插件,需要3 步,我们以PageHelper 为 1.编写自己的插件类 1)实现Interceptor 接口 这个是所有的插件必须实现的接口. 2)添加 ...
- MyBatis 插件原理与自定义插件-代理和拦截是怎么实现的?
问题1:四大对象什么时候被代理,也就是:代理对象是什么时候创建的? 问题2:多个插件的情况下,代理能不能被代理?代理顺序和调用顺序的关系? 问题3:谁来创建代理对象? 问题4:被代理后,调用的是什么方 ...
- idea mybatis generator插件_Mybatis使用自定义插件去掉POJO的Getter和Setter方法
Mybatis使用自定义插件去掉POJO的Getter和Setter方法
- 插件properties_Meshlab编写自定义插件(下) -- 开发自定义插件
本文中的代码资源(即"附件")下载地址: 链接: https://pan.baidu.com/s/1Ci85MrtVHKVkxpGDYz2dXw 提取码: cueq 上一篇文章:I ...
- MyBatis 插件原理与自定义插件-猜想
MyBatis 的插件可以在不修改原来的代码的情况下,通过拦截的方式,改变四大核心对象的行为,比如处理参数,处理SQL,处理结果. 第一个问题: 不修改对象的代码,怎么对对象的行为进行修改,比如说在原 ...
- MyBatis 插件原理与自定义插件
MyBatis 通过提供插件机制,让我们可以根据自己的需要去增强MyBatis 的功能. 需要注意的是,如果没有完全理解MyBatis 的运行原理和插件的工作方式,最好不要使用插件,因为它会改变系底层 ...
- MyBatis 插件原理与自定义插件-用代理模式我们就要解决几个问题
1) 有哪些对象允许被代理?有哪些方法可以被拦截? 我们应该了解MyBatis 允许哪些对象的哪些方法允许被拦截,并不是每一个运行的节点都是可以被修改的.只有清楚了这些对象的方法的作用,当我们自己编写 ...
- MyBatis 插件原理与自定义插件-需求实现
1.当我们传入RowBounds 做翻页查询的时候,使用limit 物理分页,代替原来的逻辑分页. 2.在未启用日志组件的情况下,输出执行的SQL(先实现查询的拦截),并且统计SQL 的执行时间
- MyBatis 插件原理与自定义插件-应用场景分析
作用 实现方式 水平分表 对query update 方法进行拦截 在接口上添加注解,通过反射获取接口注解,根据注解上配置的参数进行分表,修改原SQL,例 如id 取模,按月分表 数据加解密 upda ...
最新文章
- Confluence 6 从你的 JDBC 连接中直接启用校验查询
- 安全退出调用多个Activity的Application
- python实验报告二_分组级运算和转换
- Pytorch:GAN生成对抗网络实现二次元人脸的生成
- delphi mysql dll直接_十万火急!!!那位高手用过libmysql.dll直接连接MySql数据库?如何将二进制文件保存到blob字段中? (60分)...
- [转]C#连接操作mysql实例
- linux之awk命令学习笔记
- MATLAB函数使用记录1-plot/line/set
- 区块链矿池(pool)汇总(不定期更新,欢迎评论区留言)
- 大数据_Flink_Java版_数据处理_流处理API_Transform(5)_connect合流---Flink工作笔记0033
- mybatis --- 事务
- TODO:这是一个我的自媒体
- ADS1115--已调通(附源码)
- python批量图片合并
- 心碎!一张照片找到救命恩人,没过几天却听到了他离世的消息
- streamx编译,streamx-console初始化启动踩坑
- 什么是GIS(地理信息系统)
- 电子小制作:手机控制的收音机
- brave+zipkin实现dubbo的服务跟踪
- 美团招聘不要黄泛区及东北人_吃瓜群众愤慨怒怼!