用stream流 手动封装分页工具类
一般我们都是用MyBatis-Plus自带的分页直接查询
我们也可能遇到前端需要展示多表的分页
一般是通过主干单表分页查询后,其他需要的显示的数据也是单表查询变成map,再封装返回前端
也可以通过创建视图,再直接用分页查询返回
但是可能遇到更复杂的场景,像我遇到的就是 一条数据展示 一张表的不同类型,前端需要展示 最高零售价、公司零售价、会员价,
他们是一张表的,我要以公司零售价为主干(还要通过其他表进行筛选,另外的则根另外表进行筛选),最后再封装回去
我的思路是哪些数据从哪张表获取,那我就一次查那张表,然后通过逻辑进行筛选,减少数据库连接,后来就写了下面的工具类:
package com.wanma.framework_web.helper;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/**
* 逻辑分页 助手类
*/
public class PageHelper {
/**
* 获取分页数据
*/
public static <T> Page<T> getPageInfo(List<T> items, Page<T> page) {
if (CollectionUtils.isEmpty(items)) {
page.setTotal(0);
page.setPages(0);
return page;
}
page.setTotal(items.size());
page.setPages(items.size() % page.getSize() == 0 ? items.size() / page.getSize() : items.size() / page.getSize() + 1);
return page.setRecords(items.stream().skip(page.getSize() * (page.getCurrent() - 1)).limit(page.getSize()).collect(Collectors.toList()));
}
/**
* 获取集合指定范围的数据
* 如果启始索引大于终止索引,返回空集合
*/
public static <T> List<T> getDataBetweenIndex(List<T> list, int startIndex, int endIndex) {
return CollectionUtils.isEmpty(list) ? list : endIndex < startIndex ? new ArrayList<>() : list.stream().skip(startIndex).limit(endIndex - startIndex).collect(Collectors.toList());
}
}