【Spring Boot】后端分页

9 篇文章 0 订阅
3 篇文章 0 订阅

分页是大数据查询必不可少的环节,为提升系统响应速度,提高用户体验,几乎所有的分页都是后端完成。除了使用pageHelper插件之外,这里猫哥总结一下自己是如何实现后端分页的,十分简单易懂。

在实现java后端前,首先了解一下mysql的limit用法。

SELECT * FROM table LIMIT [offset,] rows | rows OFFSET offset

LIMIT 子句可以被用于强制 SELECT 语句返回指定的记录数。LIMIT 接受一个或两个数字参数。参数必须是一个整数常量。如果给定两个参数,第一个参数指定第一个返回记录行的偏移量,第二个参数指定返回记录行的最大数目。初始记录行的偏移量是 0(而不是 1): 为了与 PostgreSQL 兼容,MySQL 也支持句法: LIMIT # OFFSET #。

例子:mysql> SELECT * FROM table LIMIT 5,10;  // 检索记录行 6-15  

看到这里,如何进行后端分页是不是已经有谱了?

是的,只要根据前端传回的page(当前页数)和rows(每页数据量),即能计算出select查询时limit的偏移量。最后把偏移量和每页的数量写在SQL进行查询即可。

直接上代码

Controller层

@ResponseBody
@RequestMapping(value = "/read/page", method = RequestMethod.POST, produces = "application/json")
public ResultBean readDeviceputPage(@RequestBody ReadDeviceputPageParamBean bean) {
	ResultBean ret = new ResultBean(0);

	Long page = bean.getPage();
	Long rows = bean.getRows();
	page = (null == page) || (page.longValue() <= 0L) ? Long.valueOf(1L) : page;
	long startPosition = (page.longValue() - 1L) * rows.longValue() + 1L;
	long endPosition = startPosition + rows.longValue() - 1L;
	
	List<VoucherDeviceputBean> list = deviceputMapper.readDeviceputPage(startPosition - 1L, endPosition - startPosition + 1L);
}	

Dao层

public interface VoucherDeviceputMapper {
	List<VoucherDeviceputBean> readDeviceputPage(@Param("startPosition") long startPosition, @Param("pageSize") long pageSize);
}

XML

<select id="readDeviceputPage" resultType="VoucherDeviceputBean">
   	SELECT * FROM tb_voucher_deviceput
	LIMIT #{startPosition},#{pageSize}
</select>

如上即可完成后端分页(更准确一点:DB分页?)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值