如何将集合实现mybatis种IPage的分页功能

本文介绍如何在不使用QueryWrapper的情况下实现Mybatis Plus的IPage分页功能。通过两种方式实现:一是利用工具类将集合转换为分页对象;二是直接从全量数据中截取分页数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

项目中如果获取到一个集合,在没有使用QueryWrapper方式写出分页

//查询
IPage<HseSpecialEquipment> page = new Page<>();
page.setCurrent(pageIndex);
page.setSize(pageSize);
page = iService.page(page, queryWrapper);

或则是mapper的方式,来查询

IPage<aaDto> aa = aaMapper.getAa(page,aaDto);

如果单纯的就是用集合来自己实现IPage分页,如下:

//current和Size分别如下
//分页
Integer pageIndex = Integer.parseInt(aaDto.getPageIndex());
Integer pageSize = Integer.parseInt(aaDto.getPageSize());
            
/**
 * 列表转分页
 * @param list 需要转换的集合
 * @param current 当前页数
 * @param size 每页数据量
 * @param <T> 泛型
 * @return
 */
private static <T> IPage<T> listToPage(List<T> list, Long current, Long size){
    IPage<T> iPage = new Page<>(current,size);
    iPage.setTotal(list.size());
    int startIndex = (int)((current - 1)*size);
    if(null == list || list.isEmpty() || startIndex > list.size()){
        iPage.setRecords(null);
    }
    else {
        int toIndex = (int)(current*size);
        iPage.setRecords(list.subList(startIndex,toIndex > list.size() ? list.size() : toIndex));
    }
    return iPage;
}

这样就实现了Mybatis的IPage分页

若不想写工具类也可以直接实现
前提是获取到的全量数据respDtosByAll 它的集合泛型是respDto,分页的信息在reqDto中

// 分页信息
List<respDto> respDtoByPage = respDtosByAll.subList(((int)reqDto.getCurrent()-1)*(int)reqDto.getSize()<respDtosByAll.size()?((int)reqDto.getCurrent()-1)*(int)reqDto.getSize():0,(int)reqDto.getCurrent()*(int)reqDto.getSize() > respDtosByAll.size()?respDtosByAll.size():(int)reqDto.getCurrent()*(int)reqDto.getSize());
IPage<respDto> page = new Page<>();
page.setRecords(respDtoByPage);
page.setCurrent(reqDto.getCurrent());
page.setSize(reqDto.getSize());
page.setTotal(respDtosByAll.size());
return page;
Java中,将List集合转换为IPage并进行分页通常使用MyBatis-Plus框架。MyBatis-Plus提供了IPage接口来简化分页操作。以下是一个示例代码,展示了如何将List集合转换为IPage并进行分页: ```java import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import java.util.ArrayList; import java.util.List; public class ListToIPageExample { public static void main(String[] args) { // 假设我们有一个List集合 List<Data> dataList = new ArrayList<>(); dataList.add(new Data(1, "Data 1")); dataList.add(new Data(2, "Data 2")); dataList.add(new Data(3, "Data 3")); dataList.add(new Data(4, "Data 4")); dataList.add(new Data(5, "Data 5")); // 设置分页参数 int pageNum = 1; // 当前页码 int pageSize = 2; // 每页条数 // 创建IPage对象 IPage<Data> page = new Page<>(pageNum, pageSize); // 将List转换为IPage page.setRecords(dataList); page.setTotal(dataList.size()); // 输出分页结果 System.out.println("总条数:" + page.getTotal()); System.out.println("总页数:" + page.getPages()); System.out.println("当前页码:" + page.getCurrent()); System.out.println("每页条数:" + page.getSize()); System.out.println("分页数据:" + page.getRecords()); } // 示例数据类 static class Data { private int id; private String name; public Data(int id, String name) { this.id = id; this.name = name; } public int getId() { return id; } public String getName() { return name; } @Override public String toString() { return "Data{id=" + id + ", name='" + name + "'}"; } } } ``` 在这个示例中,我们首先创建了一个包含数据的List集合。然后,我们设置了分页参数,并创建了一个IPage对象。通过`setRecords`方法将List集合的数据设置到IPage中,并通过`setTotal`方法设置总条数。最后,我们输出了分页结果。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值