日常开发-pageHelper分页失效

前言

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

分析

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

错误原因

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

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


<dependency>
    <groupId>com.github.pagehelpergroupId>
    <artifactId>pagehelper-spring-boot-starterartifactId>
    <version>1.3.0version>
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中去完成,这样就不会失效

你可能感兴趣的:(日常开发,mybatis,java,数据库)