go to index

MyBatis Plus List数据转Page

read time 3 min read
mybatis 分页 工具

概述

在实际开发中,经常会遇到将 List<T> 数据转换为 MyBatis Plus 的 Page<T> 对象的需求。本文将介绍一个实用的工具类来实现这一转换。

工具类示例

以下是一个示例工具类 PageUtil,用于将 List<T> 数据转换为 Page<T> 对象。

java
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;

import java.util.ArrayList;
import java.util.List;

public class PageUtil {

    public static <T> Page<T> getPages(Integer pageNo, Integer pageSize, List<T> list) {
        Page<T> page = new Page<>();
        int size = list.size();
        
        // 如果 pageSize 大于列表大小,调整 pageSize
        if (pageSize > size) {
            pageSize = size;
        }
        
        // 计算最大页数,防止 pageNo 越界
        int maxPage = size % pageSize == 0 ? size / pageSize : size / pageSize + 1;
        if (pageNo > maxPage) {
            pageNo = maxPage;
        }
        
        // 计算当前页第一条数据的下标
        int currentIndex = pageNo > 1 ? (pageNo - 1) * pageSize : 0;
        List<T> pageList = new ArrayList<>();
        
        // 将当前页的数据添加到 pageList
        for (int i = 0; i < pageSize && currentIndex + i < size; i++) {
            pageList.add(list.get(currentIndex + i));
        }
        
        page.setCurrent(pageNo).setSize(pageSize).setTotal(size).setRecords(pageList);
        return page;
    }
}

使用示例

实体类 User

java
public class User {
    private Long id;
    private String name;
    private Integer age;
    // 省略 getter 和 setter 方法
}

使用工具类

java
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;

import java.util.ArrayList;
import java.util.List;

public class UserService {
    public Page<User> getUsersPage(Integer pageNo, Integer pageSize) {
        List<User> userList = new ArrayList<>();
        // 假设 userList 已经填充了数据
        userList.add(new User(1L, "Alice", 30));
        userList.add(new User(2L, "Bob", 25));
        userList.add(new User(3L, "Charlie", 35));
        
        return PageUtil.getPages(pageNo, pageSize, userList);
    }
}

详细步骤

  1. 定义工具类

    • 创建一个工具类 PageUtil,其中包含 getPages 方法。
  2. 实现 getPages 方法

    • 计算列表的总大小 size
    • 如果 pageSize 大于列表大小,调整 pageSize
    • 计算最大页数 maxPage,防止 pageNo 越界。
    • 计算当前页第一条数据的下标 currentIndex
    • 将当前页的数据添加到 pageList
    • 设置 Page 对象的当前页、每页大小、总记录数和记录列表。
  3. 使用工具类

    • 在服务层或其他业务逻辑中调用 PageUtil.getPages 方法,传入页码 pageNo、每页大小 pageSize 和数据列表 list