GGBond🔈
CSDN的朋友们大家好哇,我是新来的Java练习生 CodeCodeBond!
什么是PageHelper?
这里给不知道的人儿说明一下~~ 知道的xdm可以跳过了!
PageHelper顾名思义是一个 页面 帮手。也就是分页查询的一个好用的工具。他是集成Mybatis开发的时候才能使用的,也就是说他是基于Mybatis的(拦截Mybatis的Excutor,详细可以自行冲浪)大家如果有过写分页查询的需求的时候,其实就会感受过写分页查询sql时候的不便性。
- 要思考sql分页,条数的拓展性,如何优化。
- 分页逻辑看似简单,但实际操作中涉及多个参数(页码、每页条数、总记录数等),处理不当容易导致分页错误,如计算偏移量出错、页码越界等问题。
- 维护成本高,且多人开发时每个人分页逻辑不同很难统一。
但是! 使用PageHelper这个工具帮我们解决了以上问题,(当然生产中得好好掂量这个开源工具的兼容稳定性了)当使用PageHelper,你的分页逻辑代码将会变成以下如此简单 👇
@RestController
public class IssueController {@Resourceprivate IssueService issueService;@GetMapping("/get/user/issues")public R<IssuesPageVo> getIssues(@RequestParam(defaultValue = "1") Integer pageNum,@RequestParam(defaultValue = "10") Integer pageSize){return R.success(issueService.getIssues(pageNum, pageSize));}
}
其中的issueService其实实际你写的sql就只是一个select * 。 然后把页数、页条数放进去,PageHelper就会自动帮你分好页了!!这样子的接口,前端的coding自由度更高,可以随意做拉取加载等等节流操作,再也不怕前端来找茬了。(不是
SpringBoot集成PageHelper正确姿势
开始学习这个插件的时候,可能是网上课程较老的原因,网路上搜索到的各种配置操作基本都是坑,导致我看别人博客学习踩了很多坑,现在我将它们分享出来,希望学习的朋友们及时从坑里爬出来。
坑1: 在风雨交加的一天,CodeCodeBond在学习PageHelper时候,开始谷歌SpringBoot配置PageHelper,看了看文章标题也没错。进去发现它教我在一个SSM项目中写一个配置类,甚至还有文章Maven导入的依赖也是高度重复!真是让人头晕。
在SpringBoot项目究竟要导入什么依赖
网上最常见的就是这样导依赖了
虽然版本兼容的话,也能跑,但是这不是乱导一通吗。
来看看右边的Maven大哥怎么说:
不懂英文没关系,跟着我念 Omi踢 for 丢普立kei te。
其实导入pagehelper-spring-boot-starter的时候,就已经包含了这些依赖项了。所以我们的SpringBoot项目也只需要导入这个依赖即可!
对于一个轻度代码洁癖的CRUD boy,我选择优雅导入依赖~删除冗余
在SpringBoot项目中究竟如何配置
SpringBoot中是可以直接在yml配置文件配置PageHelper的,简单方便可读性高
pagehelper:helperDialect: mysqlreasonable: truesupportMethodsArguments: trueparams: count=countSqlpageSizeZero: true
我们只需要在你对应的application.yml文件配你想的配置就可以啦!
这也是SpringBoot项目特点之一: 大大简化了配置!
配置成功后,为什么不成功
来,我们开始启动,原…Application,启动!!
噢!原来启动后有一个PageHelper的Logo啊! 你看看你有没有? [doge]
然后我们调用一下我们刚刚写好的接口,试一下哈
嘶,调用是成功了,但是为什么是select * 实际sql语句呢,我想要PageHelper给我家的LIMIT 放去哪里了??!
坑2: 这里不得不说到一个最新的版本兼容问题,这个问题当时花了我很久的时间去找到。
来看看官方文档:
GitHub - pagehelper/pagehelper-spring-boot: pagehelper-spring-boot
文档中明确说到:
相信很多人学习生活中已经和我一样,用上了SpringBoot 3.x版本了,但是呢,PageHelper插件在v1.4.6 + 才开始兼容 SpringBoot 3.x版本 !
所以这是个版本兼容问题的坑, 朋友们注意了
怎么报500了!!!(光速跑到后厨)
让我们看一下报错日志
这句话的意思是 它的LIMIT给我加到了";"的后面,也就是我的sql语句后面
我们把这个 “;” 删除,就能正常的分页查询了。
坑3: sql语句的后面不要习惯性加上你的";",会影响PageHelper加上的LIMIT的
Once again
可以看到终于实现我们正常的分页查询了!!!
ps: 这个响应体是我自己写的一个类返回的,你也可以看看PageHelper返回的PageInfo是什么样子的,然后根据需求处理数据。
最后的最后
这些都是我以前总结的一些笔记,我会慢慢把他们发到CSDN这个平台,希望可以帮助到大家!~ 我是CodeCodeBond,关注我,带你游玩后端开发~