# 手动分页
在某些场景下,我们获取到的数据是一次性拉取的完整列表(比如调用第三方接口返回的结果,或者不方便分页的本地计算数据),这时就不能依赖 MyBatis-Plus 的自动分页功能。这个时候,我们可以使用如下工具类 PageUtils 来进行手动分页处理。
# 工具类
package com.base.utils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import java.util.List;
import java.util.stream.Collectors;
public class PageUtils {
public static <T> Page<T> manualPage(List<T> list, int pageNum, int pageSize) {
Page<T> page = new Page<>(pageNum, pageSize);
page.setTotal(list.size());
List<T> records = list.stream()
.skip((long) (pageNum - 1) * pageSize)
.limit(pageSize)
.collect(Collectors.toList());
page.setRecords(records);
return page;
}
}
方法说明:
泛型支持:支持任意类型的列表数据;
skip + limit:利用 Java Stream 对列表进行分页截取;
兼容 MP Page 对象:返回的是 MyBatis-Plus 的 Page 类型,方便统一返回结构和前端兼容。
# 使用方式
List<Xxx> xxxList=xxxService.List();
return PageUtils.manualPage(xxxList,pageNum,pageSize);