1.问题:

使用 pagehelper ,如果和mybatis版本不匹配,就会出现返回结果错误问题,比如:本来想返回pageNum:1,pageSize:1的数据,但却是全部返回。自己的代码没问题的情况下,最有可能的就是版本不匹配的问题。

2.解决方案:

出现这个问题很可能就是版本不匹配。可以使用下面的版本进行测试,本人测试成功。

<dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.5</version></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.1.3</version></dependency><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>1.4.1</version></dependency>

3.pagehelper使用示例如下:

可以看到:使用的时候只需要pagehelper.startPage方法;然后在new Page放入返回列表就行。

3.1.server impl层

 @Overridepublic PageInfo listForAdmin(Integer pageNum, Integer pageSize) {PageHelper.startPage(pageNum, pageSize, "type, order_num");List<Category> categoryList = categoryMapper.selectList();PageInfo pageInfo = new PageInfo(categoryList);return pageInfo;}

3.2.service层

PageInfo listForAdmin(Integer pageNum, Integer pageSize);

3.3.controller层

@ApiOperation("后台目录列表")@GetMapping("admin/category/list")@ResponseBodypublic ApiRestResponse listCategoryForAdmin(@RequestParam Integer pageNum,@RequestParam Integer pageSize) {PageInfo pageInfo = categoryService.listForAdmin(pageNum, pageSize);return ApiRestResponse.success(pageInfo);}

希望能够帮助你,谢谢!

---------------------------------------------------------------------------------------------------------------------------------

看到的一个很好的pagehelper问题,在这里记录,以免下次自己遇到同样的问题:

你知道的越多,不知道的就越多,业余的像一棵小草!

成功路上并不拥挤,因为坚持的人不多。

编辑:业余草

blog.csdn.net/qq_35080796

推荐:https://www.xttblog.com/?p=5184

1.问题

1.1.PageHelper先开启分页,后对list数据操作

@Overridepublic PageInfo<HdQueryVo> getRecordsByView(int pageNo, int pageSize) {PageHelper.startPage(pageNo,pageSize);List<HdQueryVo> hdQueryVosByView = actionMapper.getActionByView();List<HdQueryVo> hdQueryVos = new ArrayList<>();for (HdQueryVo hdQueryVo : hdQueryVosByView) {HdQueryVo hdQueryVoSingle = new HdQueryVo();hdQueryVoSingle.setHdId(hdQueryVo.getHdId());hdQueryVoSingle.setHdType(hdQueryVo.getHdType());hdQueryVoSingle.setHdTitle(hdQueryVo.getHdTitle());hdQueryVoSingle.setHdStartDate(hdQueryVo.getHdStartDate());hdQueryVoSingle.setHdEndDate(hdQueryVo.getHdEndDate());hdQueryVoSingle.setHdStatus(hdQueryVo.getHdStatus());hdQueryVoSingle.setHdImage(hdQueryVo.getHdImage());hdQueryVoSingle.setHdNumber(hdQueryVo.getHdNumber());hdQueryVoSingle.setGmtCreate(hdQueryVo.getGmtCreate());hdQueryVoSingle.setGmtModified(hdQueryVo.getGmtModified());hdQueryVoSingle.setUserId(hdQueryVo.getUserId());if (hdQueryVo.getHdType().equals(0)) {hdQueryVoSingle.setHdJoinUsers(onlineWorksMapper.getOnlineJoinUsers(hdQueryVo.getHdId()));} else {hdQueryVoSingle.setHdJoinUsers(offlineUsersMapper.getOfflineJoinUsers(hdQueryVo.getHdId()));}hdQueryVos.add(hdQueryVoSingle);}PageInfo<HdQueryVo> pageViewInfo = new PageInfo<>(hdQueryVos);return pageViewInfo;}

可以分页,但是数据量错误,total始终等于每页数据量,即pageSize

1.2.先对list数据进行操作,后开启分页

@Overridepublic PageInfo<HdQueryVo> getRecordsByView(int pageNo, int pageSize) {List<HdQueryVo> hdQueryVosByView = actionMapper.getActionByView();List<HdQueryVo> hdQueryVos = new ArrayList<>();for (HdQueryVo hdQueryVo : hdQueryVosByView) {HdQueryVo hdQueryVoSingle = new HdQueryVo();hdQueryVoSingle.setHdId(hdQueryVo.getHdId());hdQueryVoSingle.setHdType(hdQueryVo.getHdType());hdQueryVoSingle.setHdTitle(hdQueryVo.getHdTitle());hdQueryVoSingle.setHdStartDate(hdQueryVo.getHdStartDate());hdQueryVoSingle.setHdEndDate(hdQueryVo.getHdEndDate());hdQueryVoSingle.setHdStatus(hdQueryVo.getHdStatus());hdQueryVoSingle.setHdImage(hdQueryVo.getHdImage());hdQueryVoSingle.setHdNumber(hdQueryVo.getHdNumber());hdQueryVoSingle.setGmtCreate(hdQueryVo.getGmtCreate());hdQueryVoSingle.setGmtModified(hdQueryVo.getGmtModified());hdQueryVoSingle.setUserId(hdQueryVo.getUserId());if (hdQueryVo.getHdType().equals(0)) {hdQueryVoSingle.setHdJoinUsers(onlineWorksMapper.getOnlineJoinUsers(hdQueryVo.getHdId()));} else {hdQueryVoSingle.setHdJoinUsers(offlineUsersMapper.getOfflineJoinUsers(hdQueryVo.getHdId()));}hdQueryVos.add(hdQueryVoSingle);}PageHelper.startPage(pageNo,pageSize);PageInfo<HdQueryVo> pageViewInfo = new PageInfo<>(hdQueryVos);return pageViewInfo;}

​​​​​​​

数据可以查询出来,总数total也正确,但是分页功能失效。

2.原因(重点之重的地方)

PageHelper中startPage开启分页方法只对后面的sql查询起作用

1.1 错误原因是提前开启分页后,对list操作,即PageInfo pageViewInfo = new PageInfo<>(hdQueryVos);

/*** 包装Page对象** @param list*/public PageInfo(List list) {this(list, 8);}

​​​​​​​

只是把list转为PageInfo对象,不影响前面分页数据的操作

1.2 错误原因是先对list操作后,开启翻页后没有sql语句

即sql语句没有参与分页查询

3.解决方案

直接对分页后的PageInfo对象中的数据进行操作

  • 对list集合操作,先取出PageInfo里的list集合数据,再对数据进行相关操作

  • 将操作完后的list集合再次存到PageInfo里,进行return


@Overridepublic PageInfo<HdQueryVo> getRecordsByView(int pageNo, int pageSize) {PageInfo<HdQueryVo> source = PageHelper.startPage(pageNo, pageSize).doSelectPageInfo(()->{actionMapper.getActionByView();});// 需要转换的对象PageInfo<HdQueryVo> target = new PageInfo<>();// 复制分页属性BeanUtils.copyProperties(source, target);// 对查询的list进行下一步操作,比如类型转换后List<HdQueryVo> collect = source.getList().stream().collect(Collectors.toList());List<HdQueryVo> hdQueryVos = new ArrayList<>();for (HdQueryVo hdQueryVo : collect) {HdQueryVo hdQueryVoSingle = new HdQueryVo();hdQueryVoSingle.setHdId(hdQueryVo.getHdId());hdQueryVoSingle.setHdType(hdQueryVo.getHdType());hdQueryVoSingle.setHdTitle(hdQueryVo.getHdTitle());hdQueryVoSingle.setHdStartDate(hdQueryVo.getHdStartDate());hdQueryVoSingle.setHdEndDate(hdQueryVo.getHdEndDate());hdQueryVoSingle.setHdStatus(hdQueryVo.getHdStatus());hdQueryVoSingle.setHdImage(hdQueryVo.getHdImage());hdQueryVoSingle.setHdNumber(hdQueryVo.getHdNumber());hdQueryVoSingle.setGmtCreate(hdQueryVo.getGmtCreate());hdQueryVoSingle.setGmtModified(hdQueryVo.getGmtModified());hdQueryVoSingle.setUserId(hdQueryVo.getUserId());if (hdQueryVo.getHdType().equals(0)) {hdQueryVoSingle.setHdJoinUsers(onlineWorksMapper.getOnlineJoinUsers(hdQueryVo.getHdId()));} else {hdQueryVoSingle.setHdJoinUsers(offlineUsersMapper.getOfflineJoinUsers(hdQueryVo.getHdId()));}hdQueryVos.add(hdQueryVoSingle);}// 加工后的数据放入新的pageinfotarget.setList(hdQueryVos);return target;}

​​​​​​​  

问题看起来不复杂,但初级和中级程序员遇到后基本上都素手无策。不会看源码,不知道钻研,永远都只停留在CRUD上,最多也就算是入了个门。

参考资料:

  • PageHelper官方文档:apidoc.gitee.com/free/Mybatis_PageHelper

  • PageHelper分页查询结果后再对数据List操作的方法

解决PageHelper版本不匹配,结果可能全部返回问题相关推荐

  1. 解决vue版本不匹配的问题 Vue packages version mismatch:

    解决vue版本不匹配的问题 Vue packages version mismatch: 参考文章: (1)解决vue版本不匹配的问题 Vue packages version mismatch: ( ...

  2. 树莓派安装python3.5_树莓派 | 04 安装基于python3.5的tensorflow,解决python版本不匹配问题...

    创建日期:2019-03-03 系列文章 安装流程 在终端中依次执行 sudo apt install libatlas-base-dev pip3 install tensorflow(安装pyth ...

  3. arm-server安装nvidia驱动,解决gcc版本不匹配问题,以及内核签名失败

    安装显卡nvifia驱动还是出现问题如下: The CC version check failed: The kernel was built with gcc version 7.3.0 20160 ...

  4. dbvis 数据库连接工具-更新数据库驱动方法示例演示,驱动与数据库版本不匹配问题:Unknown system variable ‘query_cache_size‘解决方法

    用 dbvis 工具连接数据库,报错信息如下: 报错的原因就是我要连接的数据库和我现在要使用的数据库驱动版本不匹配. An error occurred while establishing the ...

  5. 与 vmx86 驱动程序的版本不匹配解决方法

    一个新手可能遇到的问题 第一次安装完VMware后,启动时可能会遇到问题:与 vmx86 驱动程序的版本不匹配: 预期为xxx ,实际为 xxx. 驱动程序"vmx86.sys的版本不正确. ...

  6. 解决selenium与chrome版本不匹配问题

    在使用selenium+chrome进行自动化时,报错selenium.common.exceptions.WebDriverException: Message: 'chromedriver' 等, ...

  7. “AMD Software提示和驱动程序版本不匹配?” ——Win10自动更新降级覆盖AMD驱动的解决方法

    目录 前言 一.下载安装AMD驱动 二.下载window官方屏蔽助手 总结 前言 Win10自动更新会把我们自行安装AMD驱动降级,点击AMD Software会提示提示和驱动程序版本不匹配. 本人按 ...

  8. 解决AMD Software提示图形驱动版本不匹配问题

    文章目录 方法一:组策略编辑器关闭自动更新 方法二:Windows 11 禁止驱动程序自动更新 方法三:组策略编辑器关闭自动更新2 方法四:更改「注册表」禁止 Windows Update 自动更新驱 ...

  9. 如何解决python安装的库因版本不匹配而无法使用

    python有的库与python版本不匹配时可能无法使用.所以我们可以通过语句: import pip print(pip.pep425tags.get_supported()) 来查看python的 ...

最新文章

  1. mysql的越过用户权限表登录
  2. VS013的单元测试去哪里了
  3. Form表单基础知识和常用兼容方法笔记(二)
  4. 坐标系转换工具_借助工具实现不同坐标系之间的转换
  5. .NET FM的未来计划
  6. 【MATLAB统计分析与应用100例】案例003:matlab调用smooth函数进行加噪数据的平滑处理
  7. Hexo博客的备份与恢复
  8. SpringCloud学习笔记012---CentOs7搭建高速缓存NoSql Redis单机服务_redis_4.0.1_或者redis_6.0.x_可自定义版本
  9. 永久更改R包的安装目录 #R语言
  10. php中的oop思想,OOP思想指的是什么?
  11. layui上传图片回显
  12. matlab研究锂电池,基于MATLAB的锂电池健康状态建模实现
  13. C语言四分位数Quartile算法(附完整源码)
  14. 人人网,给我个“上”你的理由吧?
  15. java小马哥百度网盘_思否编程(小马哥):Java 微服务实践 - Spring Boot / Spring Cloud全套,完整版下载 - VIPC6资源网...
  16. 这位智商奇高的超级天才去了:他简直活出了别人八辈子的精彩!
  17. c++primer plus 6 读书笔记 第四章 复合类型
  18. 电影网站数据查取小试
  19. 可关注10只超跌次新小盘股
  20. CSS----transform:rotate 旋转基本使用方法

热门文章

  1. SEO与SEM区别是什么
  2. 【软件测试】快速入行软件测试
  3. English - Grammar(未完)
  4. 百度新闻爬虫搜索引擎实战---爬虫篇(2)
  5. 跟谁学盈利神话已破,烧钱大战没有赢家
  6. java语言 用Switch语句划分成绩
  7. coco数据集分割可视化格式转换
  8. 淡墨写韵,不守起承转合
  9. 极客星球 | 图像技术在上亿规模实拍图片中的应用
  10. 语音控制Office,这个功能一定要体验