mybatis plus分页查询count数量和返回list结果不一致

8 篇文章 0 订阅
4 篇文章 0 订阅
  • 本地调试一个方法,模拟分页参数为

     ,出现奇怪的现象

    分页插件使用threadlocal保存当前的分页参数并在调用查询的时候先count一次,此问题现象为count的时候是有1条数据的,但是返回的list结果集却没有数据并且没有打印执行select list的sql语句,好奇怪啊,按道理是两者的数据量肯定是一样的 并且要执行2次sql查询

  • 于是进入debug查看,首先进入到executeForMany方法

  • 接着进入selectList方法

  • 继续进入Plugin的invoke方法

  • 接着进入pageinterceptor的intercept方法此方法里面的beforeCount为分页逻辑先count的处理逻辑,执行完成之后count==1,此处还没发现问题

  • 进入afterCount方法发现afterCount方法返回值为false于是程序走到了第77行并且跳过了执行list查询的关键代码

  • 由上面分析可知,要想执行list的查询sql,this.dialect.afterCount代码必须要返回true,即page.getPageNum() > 0 && count > page.getStartRow();必须要返回true,即page.getPageNum()必须要大于0,也就是分页的参数起始页码应该要从1开始而不是0,所以修改分页参数为1后setCurrPage(1),一切正常,bug解决

     

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Mybatis-Plus提供了一个Page对象用于分页查询,其中包括当前页码、每页显示数量、总记录数等信息。在进行分页查询时,我们需要先查询总记录数,然后再查询对应的数据页。 Mybatis-Plus已经为我们提供了方便的方法来进行分页查询,我们只需要在mapper接口中定义一个带有Page参数的查询方法即可。例如: ```java List<User> selectUserList(Page<User> page); ``` 在查询中,我们需要使用Mybatis-Plus提供的Page对象来进行分页查询。在查询之前,我们需要先设置Page对象的当前页码和每页显示数量: ```java Page<User> page = new Page<>(1, 10); // 查询第1页,每页显示10条记录 ``` 接下来,我们需要在查询之前先查询出总记录数,这个过程可以使用Mybatis-Plus提供的selectCount方法: ```java long total = userMapper.selectCount(null); // 查询总记录数 page.setTotal(total); // 设置总记录数 ``` 然后,我们就可以使用Page对象进行分页查询了: ```java List<User> userList = userMapper.selectUserList(page); page.setRecords(userList); // 设置数据页 ``` 在进行分页查询时,Mybatis-Plus会自动拼接分页SQL语句,并将分页参数传递给SQL语句。例如,在MySQL中,分页SQL语句可以如下所示: ```sql SELECT * FROM user LIMIT 0, 10; ``` 其中,0表示起始记录数,10表示每页显示数量Mybatis-Plus会根据当前页码和每页显示数量自动计算出起始记录数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值