Java后端数据分页问题


前言

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> ResultBean<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<ReturnParamVO>> getPage(SearchParamDTO searchParam) {
	    ResponseBean<ResultBean<ReturnParamVO>> responseBean;
	    try {
	        // 查询结果集对象
	        PageHelper.startPage(searchParam.getStart(), searchParam.getLength());
	        PageInfo<ReturnParamVO> pageInfo = new PageInfo<>( searchMapper.selectList(searchParam));
	        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;
	}

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


总结

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值