list转PageMoel
分页的最底层就是:若要展示第二页的五个数据,就只取list集合的第6~10个数据,所有的方法都是以这个为底层,只不过进行了封装然后加上了不同的算法。
通用方法
//LIST转page函数
public <T> Page<T> listConvertToPage(List<T> list, Pageable pageable) {
// 当前页第一条数据在List中的位置
int start = (int)pageable.getOffset();
// 当前页最后一条数据在List中的位置
int end = (start + pageable.getPageSize()) > list.size() ? list.size() : ( start + pageable.getPageSize());
// 配置分页数据
return new PageImpl<T>(list.subList(start, end), pageable, list.size());
}
PageRequest pageRequest = PageRequest.of(pageNo, pageSize);
Page<OrgListVO> orgListVOS = listConvertToPage(result, pageRequest); //这里的result就是需要进行分页的list
PageModel pageModel = new PageModel();
pageModel.setTotal(orgListVOS.getSize());
pageModel.setPageNo(pageNo);
pageModel.setPageSize(pageSize);
pageModel.setRows(orgListVOS.getContent());
return pageModel;
实战代码
现有一个东拼西凑变成的List result,
现需要将它分页展示
/**
* 获取组织机构列表
*
* @param status
* @param keyWords
* @param sysCode
* @return
*/
@Override
public PageModel orgListByStatusAndKey(String status, String keyWords, String sysCode, String orgCode, Integer pageNo, Integer pageSize) {
//当orgCode不为空的情况下
List<OrgListVO> result = new ArrayList<>();
if (!StringUtils.isEmpty(orgCode)) {
result = wuhuFindOrgBySysAndOrgCode(sysCode, orgCode);}
//orgCode为空的情况下
} else {
result = orgMapper.orgListByStatusAndKey(status, keyWords, null);
}
//list转Page
PageRequest pageRequest = PageRequest.of(pageNo, pageSize);
Page<OrgListVO> orgListVOS = listConvertToPage(result, pageRequest);
PageModel pageModel = new PageModel();
pageModel.setTotal(orgListVOS.getSize());
pageModel.setPageNo(pageNo);
pageModel.setPageSize(pageSize);
pageModel.setRows(orgListVOS.getContent());
return pageModel;
}
//LIST转page函数
public <T> Page<T> listConvertToPage(List<T> list, Pageable pageable) {
// 当前页第一条数据在List中的位置
int start = (int) pageable.getOffset();
// 当前页最后一条数据在List中的位置
int end = (start + pageable.getPageSize()) > list.size() ? list.size() : (start + pageable.getPageSize());
// 配置分页数据
return new PageImpl<T>(list.subList(start, end), pageable, list.size());
}
总结:
你要知道自己为啥不会:
- 首先是看到这个代码就不是很懂,但这个其实也就是一个ListSub(begin,end)
- 在mybatis没出来的时候,别人是如何进行分页的?
不还是将一个List集合进行分割,然后进行展示。