日常开发-pageHelper分页失效

前言

pageHelper是一款优秀的Mybatis分页插件,在项目中可以非常便利的使用,使开发效率得到很大的提升,但不支持一对多结果映射的分页查询,所以在平时的使用时,对于一对多分页会出现分页错误,这篇文章主要对pageHelper分页错误进行重现以及提出解决方案。

分析

mybatis进行一对多查询时,映射文件(mapper.xml)中的sql语句中使用的左连接,pageHelper会自动对这条左连接sql语句进行select count(0)的处理,并把结果作为分页结构的记录总数,然后自动将limit拼接到sql语句末尾进行分页,由于左连接查询时,连接条件on条件不唯一(即一对多)时,结果会产生笛卡尔积,所以经过pagehelper插件分页得到的记录总数和分页结果并不是预期的结果
前言转自:【菜鸟阿都】

错误原因

  • 第一种:
    依赖引入错误,
    我的错误依赖
<dependency>  
  <groupId>com.github.pagehelper</groupId>    
  <artifactId>pagehelper</artifactId>    
  <version>5.3.0</version>
</dependency>

尽量多尝试几个版本
修改正确依赖(这里尽量去maven仓库去用最新而稳定的版本maven仓库跳转

<!-- https://mvnrepository.com/artifact/com.github.pagehelper/pagehelper-spring-boot-starter -->
<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper-spring-boot-starter</artifactId>
    <version>1.3.0</version>
</dependency>

再者记得加配置文件


#pagehelper分页配置
pagehelper:
  helperDialect: mysql          #分页插件会自动检测当前的数据库链接,自动选择合适的分页方式。
  reasonable: true              #分页合理化参数,默认值为false。
  supportMethodsArguments: true #支持通过 Mapper 接口参数来传递分页参数,默认值false
  params: count=countSql        #增加了该参数来配置参数映射,用于从对象中根据属性名取值。
  • 第二种:
    代码查询问题,可参考思否

在Controller的方法中

PageHelper.startPage(1,5);//从第一页开始,每页5条记录
以上代码后面需紧跟查询语句
List<Test> tests = testService.getAllTestsByTypeId(testTypeid);
PageInfo pageInfo = new PageInfo(tests,5);

当一个方法中有多个查询语句时,只有紧跟在PageHelper.starPage()方法后的查询结果才会分页。

缺少以上三步都会导致分页失效

  • 第三种:对于一对多的查询,最好使用标签子查询的方式,不然分页也会失败
    看一下一对多正确的使用姿势

  • 第四种:千万不要在每一页中的数据进行筛选或者添加操作,但是可以去对每页的对象进行属性的封装,千万不要去删除和添加每页的数据。

  • 总之:
    1、第二种错误就是在PageHelper.startPage(1,5)后紧跟的查询语句有效,后面再加查询语句就没有用

2、对分页的数据千万不要增加和删除,都把增加和删除这些操作多放在sql中去完成,这样就不会失效

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值