Java编程语言,使用时间戳机制实现分页查询的示例

一、背景

分页查询一般的实现方式是:输入当前页码page以及每页数量size,再加上其他的查询条件。
比如:查询第一页,page=0, size=10, 如果返回的数据集小于10,说明当前页是最后一页。
反之,如果有下一页,则page++,size不变。

这当然是常规的一种分页查询实现。

本文我们将要通过时间戳机制实现另外一种分页查询。

二、时间戳机制

要想实现时间戳机制的分页查询,前提是分页查询的排序条件是创建时间或更新时间。
这里以更新时间为例:

  • 查询第一页,按更新时间倒序排列,时间戳传0
  • 当要上拉查询下一页的时候,时间戳传最后一条记录的更新时间。
  • 当下拉刷新的时候,时间戳则传入第一条记录的更新时间。

这种分页查询的入参包括

  • 1、type: 0-下拉(上一页); 1-上拉(下一页)
  • 2、timestamp: 时间戳,可能取最后第一条记录的更新时间,也可能是第一条记录的更新时间。
  • 3、每页数量size
  • 4、其他查询条件

三、分页查询的实现

伪代码

if (type == 0) {
  where updateTime > ${timestamp} and ...(其他查询条件)
} else if (type == 1) {
  where updateTime < ${timestamp} and ...(其他查询条件)
}

// 按更新时间倒序排列
// 每页数量
order by updateTime desc limit {size}

在这里插入图片描述

四、总结

这种分页查询,以时间戳为增量更新的标记,好处是,不用去组装分页语句,只需要传入每页数量,不用根据当前页码和每页数量而计算。

使用时,需要注意的是,如果记录的更新时间频繁更新,会导致结果一会在当前页,一会在上一页。(因为在你刷新页面的时候,该记录正好更新了)

所以,客户端不要缓存上一次的查询结果集,如果要,那也得区分用户是下拉刷新还是上拉查询。

总之,要小心同一个记录被重复出现在次增量查询的结果集里。

如果是以创建时间为准,然后时间戳对比创建时间来增量查询,那么就不会出现这个问题了。

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天草二十六_简村人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值