若依分页list数据(对list数据进行分页而不是对sql语句进行分页)
前言
在实际开发中,我们三方接口获取数据,并没有分页,而是一个JSON数据或者就是一个list集合,但是我们要将数据进行分页并整合到若依系统中,这篇博客主要是解决这个问题。
在若依系统上面进行修改只是修改后端部分代码即可,前端任然使用若依原本的。
一、若依原系统分页主要代码示例
/**
* 下面修改也以这个list作为例子
*/
@PostMapping("/list")
@ResponseBody
public TableDataInfo list(Notice notice)
{
startPage();
List<Notice> list = noticeService.selectNoticeList(notice);
return getDataTable(list);
}
/**
* 设置请求分页数据
*/
protected void startPage()
{
PageUtils.startPage();
}
/**
* 设置请求分页数据
*/
public static void startPage()
{
PageDomain pageDomain = TableSupport.buildPageRequest();
Integer pageNum = pageDomain.getPageNum();
Integer pageSize = pageDomain.getPageSize();
if (StringUtils.isNotNull(pageNum) && StringUtils.isNotNull(pageSize))
{
String orderBy = SqlUtil.escapeOrderBySql(pageDomain.getOrderBy());
PageHelper.startPage(pageNum, pageSize, orderBy);
}
}
/**
* 响应请求分页数据
*/
@SuppressWarnings({ "rawtypes", "unchecked" })
protected TableDataInfo getDataTable(List<?> list)
{
TableDataInfo rspData = new TableDataInfo();
rspData.setCode(0);
rspData.setRows(list);
rspData.setTotal(new PageInfo(list).getTotal());
return rspData;
}
二、修改
工具类:将list数据进行切割,展示那页的数据,每页展示多少数据
public class PageByList {
/**
* 开始分页
*
* @param list 传入的list集合
* @param pageNum 页码
* @param pageSize 每页多少条数据
* @return
*/
public static List startPage(List list, Integer pageNum,
Integer pageSize) {
if (list == null) {
return null;
}
if (list.size() == 0) {
return null;
}
Integer count = list.size(); // 记录总数
Integer pageCount = 0; // 页数
if (count % pageSize == 0) {
pageCount = count / pageSize;
} else {
pageCount = count / pageSize + 1;
}
int fromIndex = 0; // 开始索引
int toIndex = 0; // 结束索引
if (pageNum != pageCount) {
fromIndex = (pageNum - 1) * pageSize;
toIndex = fromIndex + pageSize;
} else {
fromIndex = (pageNum - 1) * pageSize;
toIndex = count;
}
List pageList = list.subList(fromIndex, toIndex);
return pageList;
}
}
具体使用(在上面那个例子上做修改,结合着看)
@PostMapping("/list")
@ResponseBody
public TableDataInfo list(Notice notice)
{
PageDomain pageDomain = TableSupport.buildPageRequest();
Integer pageNum = pageDomain.getPageNum();
Integer pageSize = pageDomain.getPageSize();
List<Notice> list = noticeService.selectNoticeList(notice);//这里获取list数据,下面对list数据进行分页,并且整合到若依框架中,返回给前端进行展示。
TableDataInfo rspData = new TableDataInfo();
rspData.setCode(0);
rspData.setRows(PageByList.startPage(list, pageNum, pageSize));
rspData.setTotal(new PageInfo(list).getTotal());
return rspData;
}
说明:可以根据自己的需要进行封装,因为用的不多,我就没有封装。
这里就没有调用原系统的startPage()方法,这个方法主要是对sql进行拦截,在sql后面加分页函数limit,我们不是对sql进行操作,而是对list进行操作,所以就没有调用startPage()方法。然后就是setRows()方法要使用我给的工具类对原list进行切割后产生的list。