# 手动分页

在某些场景下,我们获取到的数据是一次性拉取的完整列表(比如调用第三方接口返回的结果,或者不方便分页的本地计算数据),这时就不能依赖 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);