概述
在实际开发中,经常会遇到将 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);
}
}
详细步骤
定义工具类:
- 创建一个工具类
PageUtil
,其中包含getPages
方法。
- 创建一个工具类
实现
getPages
方法:- 计算列表的总大小
size
。 - 如果
pageSize
大于列表大小,调整pageSize
。 - 计算最大页数
maxPage
,防止pageNo
越界。 - 计算当前页第一条数据的下标
currentIndex
。 - 将当前页的数据添加到
pageList
。 - 设置
Page
对象的当前页、每页大小、总记录数和记录列表。
- 计算列表的总大小
使用工具类:
- 在服务层或其他业务逻辑中调用
PageUtil.getPages
方法,传入页码pageNo
、每页大小pageSize
和数据列表list
。
- 在服务层或其他业务逻辑中调用