Mybatis-plus分页插件PageHelper的两种不同使用方式

最近在写需求的过程中接触到许多的分页,但是对于不同情况下会有不同的分页方法选择,由于目前使用得比较多的是mybatis-plus里面的分页插件,因此通过本文详细了解一下pageHelper的使用。

分页最终都是在sql中通过limit完成,limit offset,pageSize

PageHelper.startPage

功能特点:

PageHelper.startPage 是 PageHelper 提供的最常用的分页方法。它通过拦截器的方式,在 SQL 查询前自动执行分页操作,生成分页的 SQL 语句,包括查询总数和查询指定页码的数据。并将分页查询的信息存储在 PageInfo 对象中,包括总记录数、总页数、当前页码等信息。

使用方法:

PageHelper.startPage(pageNum, pageSize); // 执行查询操作
List<User> userList= userMapper.selectUsers(); 
PageInfo<User> pageInfo = new PageInfo<>(userList);
优点:
  • 简单易用,使用起来方便快捷。
  • PageInfo 对象提供了丰富的分页信息,方便对分页结果进行操作和展示。
缺点:
  • 需要查询总数,可能在处理大数据量时影响查询性能。
  • 对于大数据量,如果只需要当前页数据而不关心总数,会浪费查询时间。

PageMethod.offsetPage

功能特点:

PageMethod.offsetPage 是 PageHelper 提供的另一种分页方式。它通过在查询方法中手动指定偏移量和每页条数来实现分页,不进行总数查询,因此适合处理大数据量的分页查询。

使用方法:

 PageMethod.offsetPage(offset, pageSize, false);
// 执行查询操作
List<User> userList = userMapper.selectUsers();
优点:

避免了查询总数,性能较好,适合于大数据量的分页查询。
灵活性较高,可以手动控制偏移量和每页条数。

缺点:

可能出现数据重复或丢失的情况,因为为了判断是否有下一页,会查询额外的一条记录。
使用上需要手动处理分页逻辑,不像 PageHelper.startPage 那样直观和方便。

PageMethod.offsetPage是否有下一页的优化:

当使用 PageMethod.offsetPage 方法进行分页查询时,通常会额外获取比当前页码所需的数据多一条(pageSize + 1)。这是为了判断是否存在下一页数据,因为如果获取的结果等于 pageSize + 1,则说明还有下一页数据存在。在此过程中,需要进行判断并处理是否有下一页数据以及获取当前页的数据。

下面是一个示例,演示了使用 PageMethod.offsetPage 方法进行分页查询后,判断是否存在下一页数据并获取当前页数据的处理方式:

PageMethod.offsetPage((pageNum - 1) * pageSize, pageSize + 1, false);
// 执行查询操作
List<User> userList = userMapper.selectUsers();

boolean hasNextPage = userList.size() > pageSize; // 判断是否有下一页数据

List<User> currentPageData;
if (hasNextPage) {
    // 如果存在下一页数据,需要去掉多余的那条数据
    currentPageData = userList.subList(0, pageSize);
} else {
    currentPageData = userList;
}

// 处理当前页数据
// ...

// 返回结果或其他操作
// ...

在这个例子中,首先使用 PageMethod.offsetPage 方法进行分页查询,查询结果存储在 userList 中。接着,根据 userList 的大小与预期的 pageSize 进行比较,判断是否有下一页数据,并根据情况截取获取当前页的数据。

如果 userList 的大小大于 pageSize,说明存在下一页数据,因此需要将多出来的那条数据去掉(subList(0, pageSize)),得到当前页的数据。否则,userList 的大小等于或小于 pageSize,表示没有下一页数据,直接将 userList 作为当前页数据即可。

最后,对当前页数据进行处理,比如展示、返回给前端或进行其他操作。这种方式可以处理 PageMethod.offsetPage 方法获取的分页数据,确保获取当前页数据的正确性,并判断是否有下一页数据。

选择使用哪种方式,需要根据具体场景需求和性能要求来决定。PageHelper.startPage
对于普通分页查询和对总数有要求的场景比较适用,而 PageMethod.offsetPage 则适合于大数据量分页且不要求总数查询的情况。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

酱学编程

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

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

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

打赏作者

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

抵扣说明:

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

余额充值