pageHelper分页原理及实战

mybatis插件-pageHelper是我们实际开发中常见的分页工具。

一.PageHelper方法分页的原理

      PageHelper方法使用了静态的ThreadLocal参数,分页参数和线程是绑定的。内部流程是ThreadLocal中设置了分页参数(pageIndex,pageSize),之后在查询执行的时候,获取当线程中的分页参数,执行查询的时候通过拦截器在sql语句中添加分页参数,之后实现分页查询,查询结束后在 finally 语句中清除ThreadLocal中的查询参数

二.使用方法:

                     1.调用PageHelper方法:PageHelper.startPage(pageIndex, pageSize)

                     2. MyBatis 查询方法

       注意:只要你可以保证在PageHelper方法调用后紧跟 MyBatis 查询方法,这就是安全的。因为PageHelper在finally代码段中自动清除了ThreadLocal存储的对象。


三.具体使用项目案列:

1.在api层中如下:

2.在controller中如下:

page<TbRptManage> myReport(String userId.Integer pageIndex,Integer pageSize){

page<TbRptManage> myReportPage=cognosDisplayService.getMyReport(userId,pageIndex,pageSize);

if(myReportPage.getTotal()>0){

list<TbRptManage> menuVos=myReportPage.stream().map(po -> CopyUtils.copyProperties(po,TbRptManage.class)).

collect(Collectors.toList());

return  RestResponse.page(menuVos,PageInfo.instancefrom(myReportPage.toPageInfo()));

}

注解:

##steam():把一个源数据,可以是集合,数组,I/O channel, 产生器generator 等,转化成流。

##map():用于映射每个元素到对应的结果,以下代码片段使用 map 输出了元素对应的平方数:

List<Integer> numbers = Arrays.asList(3, 2, 2, 3, 7, 3, 5); // 获取对应的平方数

List<Integer> squaresList = numbers.stream().map( i -> i*i).distinct().collect(Collectors.toList());

##Collectors(): 类实现了很多归约操作,例如将流转换成集合和聚合元素,Collectors 可用于返回列表或字符串:

  


3.在serviceImpl层中,调用PageHelper.startPage(pageIndex,pageSize)方法,后跟查询语句,

如图所示:

 

原文地址:https://www.cnblogs.com/libaowen609/p/12819648.html