若依分页list数据(对list数据进行分页而不是对sql语句进行分页)

若依分页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。

  • 7
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值