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

项目中如果获取到一个集合,在没有使用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;
MyBatis Plus 实现分页是通过使用 `Page` 类来实现的,该类继承于 `RowBounds` 类,它包含了分页信息和查询结果集合。 具体实现步骤如下: 1. 在 MyBatis Plus 配置文件中配置分页插件,例如: ```xml <plugins> <plugin interceptor="com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor"/> </plugins> ``` 2. 在 Mapper 接口中编写查询方法,并使用 `Page` 类作为参数,例如: ```java List<User> selectUserPage(Page<User> page); ``` 3. 在查询方法中使用 MyBatis Plus 提供的 `PageHelper` 工具类进行分页查询,例如: ```java @Override public List<User> selectUserPage(Page<User> page) { return baseMapper.selectPage(page, null); } ``` 在这个例子中,`baseMapper` 是 MyBatis Plus 自动生成的 Mapper 对象。 4. 在 Controller 层中调用查询方法,并构造 `Page` 对象作为参数,例如: ```java @GetMapping("/users") public List<User> selectUserPage(@RequestParam("page") int pageNum, @RequestParam("size") int pageSize) { Page<User> page = new Page<>(pageNum, pageSize); return userService.selectUserPage(page).getRecords(); } ``` 在这个例子中,`userService` 是自己定义的 Service 对象,`pageNum` 和 `pageSize` 分别是当前页数和每页大小。调用 `selectUserPage` 方法返回的是一个 `IPage<User>` 对象,通过 `getRecords()` 方法获取查询结果集合。 总的来说,MyBatis Plus 实现分页的过程比较简单,只需要在配置文件中配置分页插件,然后在 Mapper 接口中编写查询方法并使用 `Page` 类作为参数即可。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值