Mybatis在设置排序后PageHelper分页插件分页第2页开始失效的问题

  • 场景

    一个简单的页面查询(后台用mvc+mybatis),page.html——>Controller——>Service(PageHelper ——>调用Dao查询)——>Dao(sql语句写在mybatis的DaoClassNameMapper.xml中)——>DataSourse。

  • 问题发现及过程

1.业务说这个页面排序,所以我首先直接在mybatis的DaoClassNameMapping.xml中的查询加了一句:"order by 排序字段 desc",结果页面分页的功能在第二页开始就没效了。

 2.我开始百度,信息梳理入下:

2.1.网上说排序的最好用PageHelper.orderBy("字段名 排序方式DESC|ASC");设置比较好。

2.2.而且是在调用Dao前设置进去,因为这样在mybatis查询的时候,会从Pagehelper中获取排序规则动态拼接到Mapping.xml中写的SQL中,如果自己在SQL写了排序,可能会导致PageHelper设置后动态拼接SQL出现两个"order by"失效;(我的显然不是这个问题,因为我没在PageHelper中设置排序)。

3.问题原因:

分页是依据起始点和偏移量的,页面每点击换页,就会重新设置起始点和偏移量来查询某一页的展示结果集,这要求排序字段唯一,我这次是按日期(某月yyyyMM)排序,因为众多数据的日期是非唯一的,所以换页之后的查询可能和换页前的查询顺序是一样的,就出问题了。

4.解决办法:

 双字段排序,即二级排序。 比如"order by 非唯一字段 DESC"分页失效,那么就再设置一个唯一字段的二级排序。比如"order by 非唯一字段 DESC,唯一字段 DESC"。可解决排序后PageHelper失效的问题。

后话:

其实PageHelper设置排序和直接在SQL写排序都是没问题的,只是不要一起使用就可以。

 

  • 以下是参考博文

https://blog.csdn.net/kalnon/article/details/79559627

https://blog.csdn.net/qq_40995335/article/details/80845914

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值