Mybatis没写分页莫名自动分页?PageHelper自动分页(踩坑)

pagehelper是一个非常简单实用的分页插件,但是还是有一个小坑在里面的,话不多说,直接上干货。

1. 分页的使用

PageInfo<T> pageInfo = PageHelper.startPage(pageNum,pageSize).doSelectPageInfo(() -> mapper.query());

参数说明: pageNum 第几页

​ pageSize 一页显示数量

这样就实现了SQL的分页,pagehelper会在SQL中自动加上分页的信息(limit)。

如果不习惯使用lamabda表达式,下面的代码也一样可以实现分页。

注意,PageHelper.startPage()方法调用以后,后面必须有一个Mapper的查询方法,必须被消费掉。否则会由于ThreadLocal的原因,当线程被其他方法调用时被分页。

2. 小心避坑

这个坑就是“ 某些情况下,我明明没有使用PageHelper.startPage()方法,但是我的SQL为什么分页了?”

引起这个情况的可能有两种原因:

① 上一个PageHelper.startPage()未被消费
简单来讲,你上面的代码调用了PageHelper.startPage()方法,但是后面没有一个Mapper的查询方法来消费掉。所以你的这个查询就用到了上一个的分页。

② 你的传参对象的分页字段是pageNum和pageSize
划重点,这个才是真正的坑。只要你的传参对象的分页字段是pageNum和pageSize,你不需要调用PageHelper.startPage()方法,pagehelper就会帮你实现分页,因为pageNum和pageSize是PageHelper.startPage()方法的参数。

public static <E> Page<E> startPage(int pageNum, int pageSize) {
	return startPage(pageNum, pageSize, true);
}

所以,为了避免这种情况的出现,请不要给你的分页字段起这两个名字。pageNumber和pageCount就很不错。

另外也可以在你不想被分页的方法查询前,主动清理分页缓存:

PageHelper.clearPage();
  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: PageHelper是一个MyBatis分页插件,它可以自动生成分页语句并执行查询,使用起来非常方便。 使用PageHelper实现分页查询的步骤如下: 1. 在项目中引入PageHelper依赖。 2. 在MyBatis的配置文件中添加PageHelper插件。 3. 在需要分页的查询方法前调用PageHelper.startPage方法,传入分页参数。 4. 紧接着执行查询方法。 5. 最后使用PageInfo对结果进行包装,并返回给调用者。 举个例子: ```java // 在查询方法前调用PageHelper.startPage,传入分页参数 PageHelper.startPage(pageNum, pageSize); // 执行查询 List<User> users = userMapper.selectUsers(); // 将查询结果包装成PageInfo对象 PageInfo<User> pageInfo = new PageInfo<>(users); ``` 在使用PageHelper时,还可以调用其它方法来设置排序、查询条件等。具体用法可以参考PageHelper的文档或者示例代码。 ### 回答2: PageHelper.startPageMyBatis的一个分页插件,用于实现分页查询功能。该方法需要在查询语句之前调用。 使用PageHelper.startPage可以简化分页查询的实现。传入的参数是页码和每页显示的记录数。方法会通过拦截器,在执行查询之前,自动为查询语句添加分页的相关信息。 使用该方法的好处是不需要自行编写分页查询的SQL语句,也无需手动计算分页的偏移量。PageHelper会在查询时将相关的分页参数加载到ThreadLocal中,并在查询结束后自动清除。 PageHelper.startPage的用法如下: 1. 在查询方法中调用PageHelper.startPage(pageNum, pageSize)方法,传入页码和每页显示的记录数; 2. 执行查询语句,得到查询结果; 3. 通过PageInfo对象来获取分页的相关信息,如总记录数、总页数等。 使用PageHelper.startPage可以简化分页查询的实现,提高开发效率。同时,该插件还支持更复杂的分页查询需求,如排序、自定义分页等。因此,PageHelper.startPage是开发中非常实用的一个分页工具。 ### 回答3: PageHelper.startPage方法是MyBatis分页插件PageHelper提供的一个静态方法,用于实现分页查询。 使用PageHelper.startPage方法的前提是已经添加了PageHelper插件的依赖,并且在MyBatis的配置文件中配置了拦截器,使得PageHelper插件能够拦截并处理分页查询语句。 PageHelper.startPage方法的作用是设置分页查询的起始位置和查询的数据条数。方法参数中传入当前页数和每页显示的数据条数,方法会将这些信息保存在ThreadLocal变量中,以供PageHelper插件拦截查询语句时使用。 使用PageHelper.startPage方法时,首先在分页查询语句之前调用该方法设置分页信息,然后执行分页查询语句。PageHelper插件会在查询语句执行前,根据设置的分页信息自动拼接分页查询的SQL语句,并在查询语句执行后,返回分页查询的结果集。 例如,假设需要查询第2页每页显示10条数据的查询语句,可以使用PageHelper.startPage(2, 10)方法设置分页信息,然后执行查询语句。PageHelper插件会自动将查询语句转换为查询第11条到第20条数据的SQL语句,并返回查询结果。 通过使用PageHelper.startPage方法,可以简化分页查询的实现过程,提高代码的可读性和可维护性,使得分页查询功能更加方便和易用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

初夏0811

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

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

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

打赏作者

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

抵扣说明:

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

余额充值