PageHelper 补充
内容来自各位网络大神的分享,小弟在此借鉴、总结了一下。
1、PageHelper的优点是,分页和Mapper.xml完全解耦。实现方式是以插件的形式,对Mybatis执行的流程进行了强化,添加了总数count和limit查询。属于物理分页。
2、Page page = PageHelper.startPage(pageNum, pageSize, true); - true表示需要统计总数,这样会多进行一次请求select count(0); 省略掉true参数只返回分页数据。
1)统计总数,(将SQL语句变为 select count(0) from xxx,只对简单SQL语句其效果,复杂SQL语句需要自己写)
Page page = PageHelper.startPage(1,-1);
long count = page.getTotal();
2)分页,pageNum - 第N页, pageSize - 每页M条数
A、只分页不统计(每次只执行分页语句)
PageHelper.startPage([pageNum],[pageSize]);
List pagelist = queryForList( xxx.class, “queryAll” , param);//pagelist就是分页之后的结果
B、分页并统计(每次执行2条语句,一条select count语句,一条分页语句)适用于查询分页时数据发生变动,需要将实时的变动信息反映到分
Page page = PageHelper.startPage([pageNum],[pageSize],[iscount]);
List pagelist = queryForList( xxx.class , “queryAll” , param);
long count = page.getTotal();
Or
List pagelist = page.getList();分页后的结果集
3)使用PageHelper查全部(不分页)
PageHelper.startPage(1,0);
List alllist = queryForList( xxx.class , “queryAll” , param);
4)PageHelper的其他API
String orderBy = PageHelper.getOrderBy(); //获取orderBy语句Page<T> page = PageHelper.startPage(Object params);Page<T> page = PageHelper.startPage(int pageNum, int pageSize);Page<T> page = PageHelper.startPage(int pageNum, int pageSize, boolean isCount);Page<T> page = PageHelper.startPage(pageNum, pageSize, orderBy);Page<T> page = PageHelper.startPage(pageNum, pageSize, isCount, isReasonable); //isReasonable分页合理化,null时用默认配置Page<T> page = PageHelper.startPage(pageNum, pageSize, isCount, isReasonable, isPageSizeZero); //isPageSizeZero是否支持PageSize为0,true且pageSize=0时返回全部结果,false时分页,null时用默认配置
5)、默认值
//RowBounds参数offset作为PageNum使用 - 默认不使用
private boolean offsetAsPageNum = false;
//RowBounds是否进行count查询 - 默认不查询
private boolean rowBoundsWithCount = false;
//当设置为true的时候,如果pagesize设置为0(或RowBounds的limit=0),就不执行分页,返回全部结果
private boolean pageSizeZero = false;
//分页合理化
private boolean reasonable = false;
//是否支持接口参数来传递分页参数,默认false
private boolean supportMethodsArguments = false;
pageHelper什么时候会导致不安全的分页?
PageHelper 方法使用了静态的 ThreadLocal 参数,分页参数和线程是绑定的。
只要你可以保证在 PageHelper 方法调用后紧跟 MyBatis 查询方法,这就是安全的。因为 PageHelper 在 finally 代码段中自动清除了 ThreadLocal 存储的对象。
如果代码在进入 Executor 前发生异常,就会导致线程不可用,这属于人为的 Bug(例如接口方法和 XML 中的不匹配,导致找不到 MappedStatement 时), 这种情况由于线程不可用,也不会导致 ThreadLocal 参数被错误的使用。
应该写成下面这个样子:
List<Country> list;
if(param1 != null){PageHelper.startPage(1, 10);list = countryMapper.selectIf(param1);
} else {list = new ArrayList<Country>();
}
这种写法就能保证安全。
PageHelper 补充相关推荐
- mybatis 分页需要的jar包下载_牛逼哄哄的PageHelper分页插件到底牛在哪里?
你知道的越多,不知道的就越多,业余的像一棵小草! 你来,我们一起精进!你不来,我和你的竞争对手一起精进! 编辑:业余草 urlify.cn/z2IFn2 推荐:https://www.xttblog. ...
- PageHelper分页插件的原理是什么
PageHelper是一款好用的开源免费的Mybatis第三方物理分页插件,其实我并不想加上好用两个字,但是为了表扬插件作者开源免费的崇高精神,我毫不犹豫的加上了好用一词作为赞美. 原本以为分页插件, ...
- concurrenthashmap实现原理_Mybatis:PageHelper分页插件源码及原理剖析
PageHelper是一款好用的开源免费的Mybatis第三方物理分页插件,其实我并不想加上好用两个字,但是为了表扬插件作者开源免费的崇高精神,我毫不犹豫的加上了好用一词作为赞美. 原本以为分页插件, ...
- PageHelper分页插件源码及原理剖析
摘要: com.github.pagehelper.PageHelper是一款好用的开源免费的Mybatis第三方物理分页插件. PageHelper是一款好用的开源免费的Mybatis第三方物理分页 ...
- 学习Spring Boot:(八)Mybatis使用分页插件PageHelper
首先Mybqtis可以通过SQL 的方式实现分页很简单,只要在查询SQL 后面加上limit #{currIndex} , #{pageSize}就可以了. 本文主要介绍使用拦截器的方式实现分页. 实 ...
- oracle 分页_Mybatis:PageHelper分页插件源码及原理剖析
点击上方"Java知音",选择"置顶公众号" 技术文章第一时间送达! 作者:祖大俊 my.oschina.net/zudajun/blog/745232 Pag ...
- Spring Boot系列六 Spring boot集成mybatis、分页插件pagehelper
1. 概述 本文的内容包括如下内容: Spring Boot集成mybatis Spring Boot集成pagehelper分页插件,定义分页的相关类 实现工具类:model转dto,实现数据层和传 ...
- com.github.pagehelper.PageHelper cannot be cast to org.apache.ibatis.plugin.Interceptor
使用pagehelper插件时异常 5.0之后的版本使用com.github.pagehelper.PageInterceptor这个类 即改为: <plugin i ...
- PageHelper:简述对物理分页插件PageHelper的认识
PageHelper是一款好用的,开源的,免费的Mybatis第三方物理分页插件.本文简单介绍PageHelper的基本使用和配置参数的含义,重点分析PageHelper作为Mybatis分页插件的实 ...
最新文章
- java 多线程处理任务_用Java多线程,将任务分步骤处理
- iconfont 图标转为字体_阿里字体库iconfont使用方法
- 未处理异常和C++异常——Windows核心编程学习手札之二十五
- flink搭建集群(一主三从)
- 通道抠图--火焰,背景颜色统一为黑色
- SQLSERVER得到数据库中所有表字段及字段中文描述
- oracle课程设计摘要,Oracle程序设计课程设计概要(doc 35页)
- java调用el_[Java教程][javaEE] EL表达式调用java方法
- linux系统下RocketMQ的集群搭建
- H3C MSR系列路由器负载分担、链路备份的实现过程详解
- 【操作系统】Nachos 内核线程
- “天中三少”辛东方:量子动力能传送人到另一个星球?
- php socket accept,使用PHP Socket开发Yar TCP服务
- python刷步数程序设计_利用python+云函数搭建自己的修改步数api接口
- redis.set方法详解
- 如何在mysql官网下载mysql最新或者以前的版本
- 策略模式——实现促销活动
- 服务器苹果系统安装教程,苹果Mac系统安装Win10正式版两种方法图文教程
- 第三章 气体探测器----气体漂移、复合、电压电流曲线、电离室、正比计数器、G-M管、四个时间
- 计算机毕业设计Java宠物托管系统(源码+系统+mysql数据库+lw文档)