题外话

如果各位客官有需要开发一些小小需求,可以私我哦,承接小需求开发,或问题定位(仅限java),价格私聊哈

前言:最近在搞一个项目,查询列表接口里面用到了PageHelper,结果遇到了一个小问题,查询出来的总数和实际得到的数据不一致,让我百思不得其解(因为本人之前基本都是用mybatis-plus的)于是就开始了我的求知之旅。。

1.问题分析

由于单纯看代码的话,就只有一个查询列表的语句

// 这里为了方便,简单写一下而已
Page page=PageMethod.startPage(pageNum, pageSize);
List resultList=mapper.list();

查看sql语句,发现了查询count的语句和查询数据的where条件不一致!!!

2.问题排查

2.1 关闭count语句优化

于是毅然打开了百度,开始搜索,看到的是
PageHelper关闭count语句优化
于是就在想,是否的确是因为语句过于复杂导致count语句优化出错(业务sql语句特别复杂,一条sql上百行【泪累~~~】)

于是就按照上面说的,在语句里加了/*keep orderby*/,然后执行后发现,查询count的sql语句的确发生变化了,但是,where条件还是不一样。查询出来的总数还是和数据列表结果不一致。。。

2.2 自定义count语句

一开始,上面博客的源码我只是简单粗略的看一眼,然后就直接试,但是经过上面的失败尝试后,只得开始啃源码。
通过查看并调试PageInterceptor源码后发现,原来我每次都是跑手写的count查询(我也是才知道原来pageHelper可以自定义写 count语句查询
在这里插入图片描述
于是我就看业务的xml,发现里面的确是有自定义的count查询,将其注释或修改就可以正常了。

所以说看其他的还不如看源码来的实际,看的再多也不如直接动手来的快捷!!还是要多养成看源码的习惯呀

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐