方式一:使用 IPage
//注意分页查询
Integer current = workOrderDto.getCurrent();
Integer size = workOrderDto.getPageSize();
// 如果分页没传,默认全部
if (Objects.isNull(current) || Objects.isNull(size)) {
current = 1;
size = -1;
}
IPage<WorkOrderVo> page = new Page<>(current, size);
IPage<WorkOrderVo> workOrderVoList = getWorkOrderVos(page, workOrderDto);
查询的mapper方法:
IPage<WorkOrderVo> selectWorkOrderList(IPage<WorkOrderVo> page,@Param("workOrderDto") WorkOrderDto workOrderDto);
-------------------------------------------------------------------------------------------------------------------------------
方式二:使用subList
//排序
List<WorkOrderVo> voList = workOrderVoList.stream().sorted(Comparator.comparing(WorkOrderVo::getDistance).thenComparing(WorkOrderVo::getId)).collect(Collectors.toList());
if(ObjectUtils.isEmpty(workOrderDto.getTargetName())&& voList.size() > 50){
List<WorkOrderVo> resList = voList.subList(0,49);
return resList;
}
这里只需要将(当前页-1)*每页数据量和每页数据量替换截取的上下界即可,没有现成的代码,懒得写了,不知道的参考第三种,一模一样....
tip:有个问题容易忽略,确保截取下标可以截取到,防止出现截取下标溢出。
--------------------------------------------------------------------------------------------------------------------------------
方式三:在sql里使用limit字段
适用场景:
1.数据太多
2.有四条数据,但只想要第二条和第三条
limit 1,2;
实现规则:
select employee_id,last_name
from employees
limit 0,20;
#0:偏移量
#20:每页数据量
# 显示第二页的话让偏移量为20
# 显示第n页: 偏移量:(pageNo-1)*pageSize
select employee_id,last_name
from employees
limit (pageNo-1)*pageSize,pageSize;
拓展:MySQL 8.0新特性:LIMIT...OFFSET...
limit A offset B;
#A:每页数据量,即pageSize
#B:偏移量