企业做网站需要租服务器吗品牌建设及龙头企业
企业做网站需要租服务器吗,品牌建设及龙头企业,wordpress收录难,腾讯会议价格做Spring Boot项目开发的小伙伴#xff0c;大概率都用过PageHelper做分页查询——毕竟它简洁高效#xff0c;一行代码就能实现分页#xff0c;之前项目里一直用得顺风顺水#xff0c;从没出过错。
可就在昨天#xff0c;分页突然“罢工”了#xff0c;排查了大半天才找到…做Spring Boot项目开发的小伙伴大概率都用过PageHelper做分页查询——毕竟它简洁高效一行代码就能实现分页之前项目里一直用得顺风顺水从没出过错。可就在昨天分页突然“罢工”了排查了大半天才找到根源今天就把这个踩坑经历分享出来帮大家避开这个隐形陷阱报错效果和核心代码如下大家可以对照自己的项目排查【核心代码】就是最常规的PageHelper分页操作仅新增了排序逻辑代码如下一步步排查锁定排序这个“罪魁祸首”比较其他业务发现只多了个排序操作所以尝试去掉排序——奇迹发生了分页总数恢复正常total能正确获取到分页功能也完全正常。这就基本确定异常就是排序操作引发的。通过Debug跟踪代码执行过程重点查看分页插件的执行逻辑。发现了核心问题新增排序后分页插件并没有执行“查询总数”的SQL语句也就是count查询。具体表现为Debug到分页插件的核心逻辑时负责查询总数的那一行代码PageHelper内部的count查询逻辑始终没有执行直接跳过导致total无法获取最终异常。如图所示深挖源码找到底层原因查阅了PageHelper的源码重点分析了orderBy方法和beforeCount方法的执行逻辑。如图所示最终发现PageHelper的orderBy方法在执行时会自动创建一个Page对象而这个自动创建的Page对象会导致PageHelper内部的beforeCount方法返回false—分页插件就会跳过count查询自然就无法获取到分页总数了。为什么排序会导致分页总数获取失败很多小伙伴可能还是有疑问排序和分页总数看似毫无关联为什么会相互影响其实核心原因在于PageHelper的Page对象构建机制——PageHelper的分页功能本质上是通过构建Page对象来实现的而Page对象的构建有两种常见的方式这也是本次异常的关键方式一使用PageHelper.startPage(pageNum, pageSize)方法手动开启分页这种方式会主动构建一个“分页Page对象”同时默认执行count查询获取分页总数方式二使用PageRowBounds对象通过参数传递分页参数pageNum、pageSize这种方式也会触发分页在拦截器中隐士构建Page对象。而我们本次项目中使用的是PageRowBounds方式实现分页但新增的PageHelper.orderBy方法有一个“隐形操作”它会优先创建一个“不分页的Page对象”这个自动创建的Page对象会让PageRowBounds构建Page逻辑失效。解决方案一次性搞定通过这次踩坑我们不仅找到了异常的根源更掌握了PageHelper分页的核心细节这里给大家整理了避坑要点和具体解决方案以后遇到类似问题直接对照解决即可1.核心避坑点使用PageRowBounds方式分页时禁止使用PageHelper.orderBy方法——orderBy会自动创建不分页的Page对象让PageRowBounds的分页配置失效导致count查询失效、总数异常。2.正确排序方式两种可选① 放弃PageRowBounds改用PageHelper.startPage方法分页同时在startPage之后、查询之前执行orderBy排序示例代码// 正确写法startPage orderBy PageHelper.startPage(pageNum, pageSize); PageHelper.orderBy(create_time desc);② 保留PageRowBounds分页将排序逻辑写入Mapper接口的SQL语句中推荐更高效、更稳定示例代码select // Mapper接口SQL新增order by select * from user where status 1 order by create_time desc; /select// 代码中仅保留分页无需额外排序 PageRowBounds pageRowBounds new PageRowBounds(pageNum, pageSize); ListUser userList userMapper.selectUserList(pageRowBounds);最后总结其实这次异常本质上是对PageHelper的底层逻辑了解不够深入——我们只知道orderBy能实现排序却不知道它背后会自动创建Page对象进而影响分页逻辑。很多技术踩坑看似诡异实则都是“细节疏忽”导致的。这里也补充几个关键注意事项帮大家进一步避坑尽量避免混用PageHelper的多种分页方式startPage和PageRowBounds不要同时使用使用orderBy方法时务必确认当前的分页方式避免触发“自动创建不分页Page对象”的隐形逻辑希望这篇解析能帮大家避开这个PageHelper的隐形陷阱以后做分页排序时少走弯路、提高开发效率。如果大家还有其他PageHelper的使用问题也可以在评论区交流一起避坑、一起进步