内容来自各位网络大神的分享,小弟在此借鉴、总结了一下。

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 补充相关推荐

  1. mybatis 分页需要的jar包下载_牛逼哄哄的PageHelper分页插件到底牛在哪里?

    你知道的越多,不知道的就越多,业余的像一棵小草! 你来,我们一起精进!你不来,我和你的竞争对手一起精进! 编辑:业余草 urlify.cn/z2IFn2 推荐:https://www.xttblog. ...

  2. PageHelper分页插件的原理是什么

    PageHelper是一款好用的开源免费的Mybatis第三方物理分页插件,其实我并不想加上好用两个字,但是为了表扬插件作者开源免费的崇高精神,我毫不犹豫的加上了好用一词作为赞美. 原本以为分页插件, ...

  3. concurrenthashmap实现原理_Mybatis:PageHelper分页插件源码及原理剖析

    PageHelper是一款好用的开源免费的Mybatis第三方物理分页插件,其实我并不想加上好用两个字,但是为了表扬插件作者开源免费的崇高精神,我毫不犹豫的加上了好用一词作为赞美. 原本以为分页插件, ...

  4. PageHelper分页插件源码及原理剖析

    摘要: com.github.pagehelper.PageHelper是一款好用的开源免费的Mybatis第三方物理分页插件. PageHelper是一款好用的开源免费的Mybatis第三方物理分页 ...

  5. 学习Spring Boot:(八)Mybatis使用分页插件PageHelper

    首先Mybqtis可以通过SQL 的方式实现分页很简单,只要在查询SQL 后面加上limit #{currIndex} , #{pageSize}就可以了. 本文主要介绍使用拦截器的方式实现分页. 实 ...

  6. oracle 分页_Mybatis:PageHelper分页插件源码及原理剖析

    点击上方"Java知音",选择"置顶公众号" 技术文章第一时间送达! 作者:祖大俊 my.oschina.net/zudajun/blog/745232 Pag ...

  7. Spring Boot系列六 Spring boot集成mybatis、分页插件pagehelper

    1. 概述 本文的内容包括如下内容: Spring Boot集成mybatis Spring Boot集成pagehelper分页插件,定义分页的相关类 实现工具类:model转dto,实现数据层和传 ...

  8. com.github.pagehelper.PageHelper cannot be cast to org.apache.ibatis.plugin.Interceptor

    使用pagehelper插件时异常       5.0之后的版本使用com.github.pagehelper.PageInterceptor这个类 即改为:         <plugin i ...

  9. PageHelper:简述对物理分页插件PageHelper的认识

    PageHelper是一款好用的,开源的,免费的Mybatis第三方物理分页插件.本文简单介绍PageHelper的基本使用和配置参数的含义,重点分析PageHelper作为Mybatis分页插件的实 ...

最新文章

  1. java 多线程处理任务_用Java多线程,将任务分步骤处理
  2. iconfont 图标转为字体_阿里字体库iconfont使用方法
  3. 未处理异常和C++异常——Windows核心编程学习手札之二十五
  4. flink搭建集群(一主三从)
  5. 通道抠图--火焰,背景颜色统一为黑色
  6. SQLSERVER得到数据库中所有表字段及字段中文描述
  7. oracle课程设计摘要,Oracle程序设计课程设计概要(doc 35页)
  8. java调用el_[Java教程][javaEE] EL表达式调用java方法
  9. linux系统下RocketMQ的集群搭建
  10. H3C MSR系列路由器负载分担、链路备份的实现过程详解
  11. 【操作系统】Nachos 内核线程
  12. “天中三少”辛东方:量子动力能传送人到另一个星球?
  13. php socket accept,使用PHP Socket开发Yar TCP服务
  14. python刷步数程序设计_利用python+云函数搭建自己的修改步数api接口
  15. redis.set方法详解
  16. 如何在mysql官网下载mysql最新或者以前的版本
  17. 策略模式——实现促销活动
  18. 服务器苹果系统安装教程,苹果Mac系统安装Win10正式版两种方法图文教程
  19. 第三章 气体探测器----气体漂移、复合、电压电流曲线、电离室、正比计数器、G-M管、四个时间
  20. 计算机毕业设计Java宠物托管系统(源码+系统+mysql数据库+lw文档)

热门文章

  1. 北京一行(三)——北大、清华、香山
  2. 从Pytorch源码看.pt文件
  3. .zip.001 .zip.002怎么用压缩包解压缩
  4. 有线网络和无线网络wifi优先级问题解决方法
  5. Android集成PayPal
  6. 互联网女皇玛丽·米克尔发布互联网新趋势报告
  7. Aspectj表达式
  8. 系分 - 案例分析 - 项目管理
  9. 日本的艺能界是最了解“妹子”资源的价值的
  10. 央视解说员手机彩铃版