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)方法,后跟查询语句,
如图所示: