0
点赞
收藏
分享

微信扫一扫

Java后端数据分页问题

笑望叔叔 2022-03-31 阅读 27

文章目录


前言

Java后端数据分页问题。


一、简易分页

前端传入分页起始页start,及每页展示数据条数length

Integer pageNum = (showDTO.getStart() == 0) ? 1 : showDTO.getStart();
Integer pageSize = (showDTO.getLength() == 0) ? 10 : showDTO.getLength();

使用如下方法重新设置要传入后端的数据。将起始页转化为第几条数据开始,将如下参数作为sql语句中Limit A,B传入,AstartBlength

showDTO.setStart((pageNum - 1) * pageSize);
showDTO.setLength(pageSize);

例如:

SELECT * FROM tableA
LIMIT #{showDTO.start} , #{showDTO.length}

二、使用Page工具封装分页(Mybatis)

使用page工具就不需要再sql中加上Limit语句。

1.定义相关方法及工具

引入下面两个包:

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;

自定义封装方法ResutBean(设置需要返回给前端的数据):

@Data
public class ResultBean<T> {
    //当前页码
    private int start;
    //每页显示条数
    private int length;
    // 总页数
    private int totalPages;
    // 当前页展示条数
    private int iTotalDisplayRecords;
    // 总条数
    private Long iTotalRecords;
    // 数据列表
    private List<T> data;
    @JsonProperty("iTotalDisplayRecords")
    public int getITotalDisplayRecords() {
        return iTotalDisplayRecords;
    }
    @JsonProperty("iTotalRecords")
    public Long getITotalRecords() {
        return iTotalRecords;
    }
}

自定义工具类CommUtil(只使用了需要的方法,可根据需求进行修改):

public class CommonUtil {
    public static <T> ActReModelResultBean<T> getResultByPageInfo(PageInfo<T> pageInfo){
        ResultBean<T> resultBean = new ResultBean<>();
        //当前页码
        resultBean.setStart(pageInfo.getPageNum());
        // 每页显示条数
        resultBean.setLength(pageInfo.getPageSize());
        // 总条数
        resultBean.setITotalRecords(pageInfo.getTotal());
        // 总页数
        resultBean.setTotalPages(pageInfo.getPages());
        // 当前页展示条数
        resultBean.setITotalDisplayRecords(pageInfo.getList().size());
        resultBean.setData(pageInfo.getList());
        return resultBean;
    }
}

2.后端方法

实例代码如下:

	public ResponseBean<ResultBean<CCReturnParamVO>> getCCListPage(CCSearchParamDTO ccSearchParam) {
	    ResponseBean<ResultBean<CCReturnParamVO>> responseBean;
	    try {
	        // 查询结果集对象
	        PageHelper.startPage(ccSearchParam.getStart(), ccSearchParam.getLength());
	        PageInfo<CCReturnParamVO> pageInfo = new PageInfo<>( carbonCopyMapper.selectCCList(ccSearchParam));
	        responseBean = new ResponseBean<>("0","查询抄送列表成功!", CommonUtil.getResultByPageInfo(pageInfo));
	    }catch (Exception e){
	        log.error("查询抄送列表出现异常:" + e.getMessage(), e);
	        responseBean = new ResponseBean<>("1","查询抄送列表出现异常:" + e.getMessage(), null);
	    }
	    log.info("查询抄送列表结束");
	    return responseBean;
	}

CcSearchParam中封装前端传入参数,其中start是页码,length是每页多少条数据。
PageIHelper存在局限性,其上不能紧挨着查询其他list的方法,否则查询会失败。且new PageInfo<>(xxx)中必须为需要进行分页的Mapper方法,否则sql中会配置不上Limit语句。


总结

两种分页方法各有好处和缺点,根据情况进行使用。

举报

相关推荐

0 条评论