在生产中查询出的List集合数据需要分页传到前端。
一、分页工具类
/**
* 分页工具类
*/
public class PayUtil {
/**
* 转换WrapperResponse<PageResult>里面的dto
*
* @param res 需要装换的WrapperResponse<PageResult<K>>
* @param clazz 装换目标dto对象
* @return WrapperResponse<PageResult < T>
*/
public static <K, T> WrapperResponse<PageResult<T>> convertWrapperPageResultData(WrapperResponse<PageResult<K>> res, Class<T> clazz) {
//新建WrapperResponse对象
WrapperResponse<PageResult<T>> response = new WrapperResponse<>();
//设置WrapperResponse对象的属性值
response.setCode(res.getCode());
response.setType(res.getType());
response.setMessage(res.getMessage());
//入参PageResult对象
PageResult<K> pageParam = res.getData();
//新建PageResult对象
PageResult<T> page = new PageResult<>();
//设置PageResult对象的属性值
page.setPageNum(pageParam.getPageNum());
page.setPageSize(pageParam.getPageSize());
page.setSize(pageParam.getSize());
page.setStartRow(pageParam.getStartRow());
page.setEndRow(pageParam.getEndRow());
page.setPages(pageParam.getPages());
page.setRecordCounts(pageParam.getRecordCounts());
page.setFirstPage(pageParam.isFirstPage());
page.setLastPage(pageParam.isLastPage());
//设置WrapperResponse对象的data值
response.setData(page);
//流处理dto装换
List<T> castList = res.getData().getData().stream().map(
dto -> (T) PowerBeanHelper.convertToBean(dto, clazz)
).collect(Collectors.toList());
//设置PageResult对象的data值
page.setData(castList);
//返回结果
return response;
}
/**
* WrapperResponse<List>转换为分页对象WrapperResponse<PageResult>
*
* @param res 要装换的WrapperResponse<List<T>>
* @param pageNum 分页数
* @param pageSize 分页大小
* @return WrapperResponse<PageResult < T>>
*/
public static <T> WrapperResponse<PageResult<T>> convertWrapperListToPageResult(WrapperResponse<List<T>> res, int pageNum, int pageSize) {
//新建WrapperResponse对象
WrapperResponse<PageResult<T>> response = new WrapperResponse<>();
//设置WrapperResponse对象的属性值
response.setCode(res.getCode());
response.setType(res.getType());
response.setMessage(res.getMessage());
//新建PageResult对象
PageResult<T> page = convertListToPageResult(res.getData(), pageNum, pageSize);
//置WrapperResponse对象的data值
response.setData(page);
return response;
}
/**
* List转换为分页对象PageResult
*
* @param list 要装换的List<T>
* @param pageNum 分页数
* @param pageSize 分页大小
* @return PageResult < T>
*/
public static <T> PageResult<T> convertListToPageResult(List<T> list, int pageNum, int pageSize) {
//总数据条数
int recordCounts = 0;
if(CollUtil.isNotEmpty(list)){
recordCounts=list.size();
}
//取数据开始行数
int startRow = (pageNum - 1) * pageSize;
//取数据结束行数
int endRow = pageNum * pageSize;
//分页后的数据结果
List<T> filterList = new ArrayList<>();
//for循环取过滤数据
for (int i = startRow; i < endRow; i++) {
if (i < recordCounts) {
filterList.add(list.get(i));
} else {
break;
}
}
//分页后的数据结果集
int filterSize = 0;
if(CollUtil.isNotEmpty(filterList)){
filterSize= filterList.size();
}
//新建PageResult对象
PageResult<T> page = new PageResult<>();
//设置PageResult对象的属性值
page.setPageNum(pageNum);
page.setPageSize(pageSize);
page.setSize(filterSize);
page.setStartRow(filterSize > 0 ? (startRow + 1) : 0);
page.setEndRow(filterSize > 0 ? (startRow + filterSize) : 0);
page.setPages((recordCounts / pageSize) + (recordCounts % pageSize == 0 ? 0 : 1));
page.setRecordCounts(recordCounts);
page.setFirstPage(pageNum == 1);
page.setLastPage(page.getPages() == pageNum);
page.setData(filterList);
return page;
}
/**
* 数据库开启了分页查询出来的list对象转换为分页对象PageResult<T>
*
* @param pageRows 要装换的List<K>,数据库开启了分页查询出来的list对象
* @param data 分页对象里面的data设值
* @return PageResult<T>
*/
public static <K, T> PageResult<T> convertPageListToPageResult(List<K> pageRows, List<T> data) {
//获取查询的分页信息
PageInfo<K> pageHelper = new PageInfo<>(pageRows);
//创建分页对象
PageResult<T> res = new PageResult<>();
//分页对象赋值
res.setPageNum(pageHelper.getPageNum());
res.setPageSize(pageHelper.getPageSize());
res.setSize(pageHelper.getSize());
res.setStartRow(pageHelper.getStartRow());
res.setEndRow(pageHelper.getEndRow());
res.setPages(pageHelper.getPages());
res.setRecordCounts((int) pageHelper.getTotal());
res.setFirstPage(pageHelper.isIsFirstPage());
res.setLastPage(pageHelper.isIsLastPage());
res.setData(data);
return res;
}
public static <T> PageResultData<T> convertPageResultData(int recordCounts, int pageSize, int pageNum, List<T> filterData) {
//总数据条数
//取数据开始行数
int startRow = (pageNum - 1) * pageSize;
//分页后的数据结果集
//新建PageResult对象
int filterSize =filterData.size();
PageResultData<T> page = new PageResultData<>();
//设置PageResult对象的属性值
page.setPageNum(pageNum);
page.setPageSize(pageSize);
page.setSize(filterSize);
page.setStartRow(filterSize > 0 ? (startRow + 1) : 0);
page.setEndRow(filterSize > 0 ? (startRow + filterSize) : 0);
page.setPages((recordCounts / pageSize) + (recordCounts % pageSize == 0 ? 0 : 1));
page.setRecordCounts(recordCounts);
page.setFirstPage(pageNum == 1);
page.setLastPage(page.getPages() == pageNum);
page.setData(filterData);
return page;
}
public static <T> PageResult<T> convertPageResult(int recordCounts,int pageSize,int pageNum,List<T> filterData) {
//总数据条数
//取数据开始行数
int startRow = (pageNum - 1) * pageSize;
//分页后的数据结果集
//新建PageResult对象
int filterSize =filterData.size();
PageResult<T> page = new PageResult<>();
//设置PageResult对象的属性值
page.setPageNum(pageNum);
page.setPageSize(pageSize);
page.setSize(filterSize);
page.setStartRow(filterSize > 0 ? (startRow + 1) : 0);
page.setEndRow(filterSize > 0 ? (startRow + filterSize) : 0);
page.setPages((recordCounts / pageSize) + (recordCounts % pageSize == 0 ? 0 : 1));
page.setRecordCounts(recordCounts);
page.setFirstPage(pageNum == 1);
page.setLastPage(page.getPages() == pageNum);
page.setData(filterData);
return page;
}
/**
* @Description 對結果集進行分頁處理
* @param data 結果list
* @param total 縂條數
* @param pageSize 每頁條數
* @param pageNum 頁碼
* @return cn.hsa.hsaf.core.framework.util.PageResult<T>
*/
public static<T> PageResult<T> dealPages(List<T> data,Integer total,Integer pageNum,Integer pageSize){
//总页数
int pages = (total / pageSize) + (total % pageSize == 0 ? 0 : 1);
//当前页开始行
int startRow = (pageNum - 1) * pageSize + 1;
//当前页结束行
int endRow = pageNum * pageSize;
//创建分页对象
PageResult<T> res = new PageResult<>();
//分页对象赋值
res.setPageNum(pageNum);
res.setPageSize(pageSize);
res.setStartRow(startRow);
res.setEndRow(endRow);
res.setPages(pages);
res.setRecordCounts(total);
res.setFirstPage(pageNum == 1);
res.setLastPage(pageNum == pages);
res.setData(data);
return res;
}
}
二、分页工具的使用
public PageResult<SpPsnRwDfrDDTO> queryRewardsInfo(QSpPsnRwDfrDDTO qSpPsnRwDfrDDTO) {
//设置分页参数
PageHelper.startPage(qSpPsnRwDfrDDTO.getPageNum(), qSpPsnRwDfrDDTO.getPageSize());
Page<SpPsnRwDfrDDTO> result;
//入参校验
if (PowerStringUtils.isBlank(qSpPsnRwDfrDDTO.getValiFlag())) {
throw new HygeiaException("有效标志不能为空");
}
result = specialPeopleRewardsDAO.queryRewardsInfo(qSpPsnRwDfrDDTO);
if (CollectionUtils.isEmpty(result)) {
return PayUtil.convertPageResult(0, qSpPsnRwDfrDDTO.getPageSize(), qSpPsnRwDfrDDTO.getPageNum(), new Page<>());
} else {
return PayUtil.convertPageResult((int) result.getTotal(), qSpPsnRwDfrDDTO.getPageSize(), qSpPsnRwDfrDDTO.getPageNum(), result);
}
}