问题背景:PageHelper的分页只有在PageHelper.startPage(pageNum,pageSize)之后的数据库查询语句才起作用,原因是PageHelper的实现原理是在数据库查询过程中通过拦截器拦截处理。在我当前的项目中,需要对本地已经处理好的ArrayList进行分页。
方法有两种:
第一种
重新自定义PageInfo类,能解决问题,但是比较繁琐,不探究。
第二种(推荐)
直接用PageHelper的类来实现,代码如下:
/**
* 分页查询
*/
public PageInfo<DeviceVO> queryDeviceVOPage(DeviceDTO deviceDTO) {
List<DeviceVO> list = this.queryDeviceVOList(deviceDTO);
//创建Page类
Page<DeviceVO> page = new Page<DeviceVO>(deviceDTO.getNum(), deviceDTO.getSize());
//为Page类中的total属性赋值
int total = list.size();
page.setTotal(total);
//计算当前需要显示的数据下标起始值
int startIndex = (deviceDTO.getNum() - 1) * deviceDTO.getSize();
int endIndex = Math.min(startIndex + deviceDTO.getSize(), total);
//从链表中截取需要显示的子链表,并加入到Page
page.addAll(list.subList(startIndex, endIndex));
//以Page创建PageInfo,并返回PageInfo
return new PageInfo<>(page);
}
标签:total,PageHelper,list,deviceDTO,Page,数据处理,pagehelper,PageInfo
From: https://www.cnblogs.com/jspider/p/16618530.html