MybatisPlus分页的一个异常解决

  • Post author:
  • Post category:其他


工作中使用MP分页时,抛出异常,我的一些解决方案。



1、方法

/**
	生成分页对象:
	Page<String>:MP的分页对象,泛型类型我直接使用String可以操作,源码中显示为查询结果类型
  参数:当前页码,页大小
*/
Page<String> pageInfo = new Page<>(current,size);

/**
	进行查询:
  Page<Student>:查询结果,会自动进行封装结果集和分页相关参数
  Page<String> pageInfo:分页信息
  @Param("studentQuery") StudentQuery studentQuery:
  		1、查询条件
      2、注意,sql语句中调用使用#{studentQuery.name}形式,否则会抛出找不到参数异常
*/
Page<Student> queryDrgCostByGroupCodesNew(Page<String> pageInfo,@Param("studentQuery") StudentQuery studentQuery);



2、遇到的问题



问题详情:

即查询时,显示异常信息为‘期待获取为1行,实际获取为XXX行’(具体异常信息忘记截图了)



问题分析:

MP分页插件工作时,会进行两次查询,即使用

select count(*)

查询当前总条数,然后才会执行实际sql并拼接分页条件查询。

我在日志中发现,MP进行

count(*)

查询时,只会获取sql语句中

from

关键字和

where

后(包括分组等)相关语句,也就是说,会将部分sql语句忽略掉,如

left join ··· on

这类语句,所以导致语意变化,无法查询结果。

而上述问题可能由

group by

语句造成,即分组前和分组后

count(*)

的差别



问题解决



解决方案1:针对连表操作问题-

left join on

使用SQL92的连表方式进行,即

from

后面跟多张表并不会被忽略

select table_a.*,table_b.*
from table_a a,table_b b
where a.id = b.a_id



解决方案2:可解决1的问题,也可解决

group by

问题

将上一步查询结果作为临时表,再一次进行查询操作,即对MP暴露一个单表操作

select *
from (
  业务sql
) t



3、最后

上面这个是我遇到的问题以及我的一些解决方案,我对MP了解也很有限,可能大家有更好的解决方案,也希望大家在评论区赐教。



版权声明:本文为qq_46329780原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。