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

news2025/4/19 10:00:00

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层

 @Override
    public 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")
    @ResponseBody
    public 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数据操作

@Override

    public 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数据进行操作,后开启分页

@Override

    public 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

 
@Override

    public 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);

        }

        // 加工后的数据放入新的pageinfo

        target.setList(hdQueryVos);


        return target;

    }

​​​​​​​  

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

参考资料:

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/109551.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

无向图以及图的java代码实现

1. 图的定义 定义&#xff1a;图是由一组顶点和一组能够将两个顶点相连的边组成的 1.1特殊的图 自环&#xff1a;即一条连接一个顶点和其自身的边&#xff1b;平行边&#xff1a;连接同一对顶点的两条边&#xff1b; 1.2图的分类 按照连接两个顶点的边的不同&#xff0c;可…

含文档+PPT+源码等]精品基于SSM的图书管理系统[包运行成功]

博主介绍&#xff1a;✌在职Java研发工程师、专注于程序设计、源码分享、技术交流、专注于Java技术领域和毕业设计✌ 项目名称 含文档PPT源码等]精品基于SSM的图书管理系统[包运行成功] 系统介绍 《基于SSM框架图书管理系统开发与设计》 该项目含有源码、配套开发软件、软件安…

Pytest用例运行及先后顺序

温馨提示 本篇约1600字&#xff0c;看完需3-5分钟&#xff0c;学习学半小时&#xff0c;加油&#xff01; 先看普通函数运行顺序 import pytestdef test_one():print("我是清安")def test_02():print("--02--")def test_a():print("--a--")de…

老生常谈的一个问题,转行学习编程,是自学还是报班

1、自学 a、优点&#xff1a; 1、自我分析问题和自我解决问题的能力比较的强&#xff1a; 自学要自己的找学习资料&#xff0c;学习要自己的摸索学习&#xff0c;学习中遇到的问题要自己去分析&#xff0c;自己去解决。 通过自学成功的人往往自我分析问题和自我解决问题的能…

Android实现戴口罩人脸检测和戴口罩识别(附Android源码)

Android实现戴口罩人脸检测和戴口罩识别(附Android源码) 目录 Android实现戴口罩人脸检测和戴口罩识别(附Android源码) 1.戴口罩识别的方法 &#xff08;1&#xff09;基于多类别目标检测的戴口罩识别方法 &#xff08;2&#xff09;基于人脸检测戴口罩分类识别方法 2.戴…

【Javassist】快速入门系列05 当有指定方法调用时替换方法调用的内容

系列文章目录 01 在方法体的开头或结尾插入代码 02 使用Javassist实现方法执行时间统计 03 使用Javassist实现方法异常处理 04 使用Javassist更改整个方法体 05 当有指定方法调用时替换方法调用的内容 文章目录系列文章目录前言引入Javassist jar包当有指定方法调用时替换方法…

1. 位1的个数

文章目录题目解法一&#xff1a;右移统计解题思路代码实现复杂度分析解法二&#xff1a;清除最低位解题思路代码实现复杂度分析解法三&#xff1a;分治解题思路代码实现复杂度分析解法四&#xff1a;JDK Integer.bitCount(int i)代码实现题目 编写一个函数&#xff0c;输入是一…

DPU02:国产USB转UART的桥接控制器兼容替代CP2102

目录DPU02芯片特性USB配置数据和序列号设置DPU02应用领域DPU02是高度集成的USB转UART的桥接控制器芯片&#xff0c;可将RS-232设计更新为USB设计&#xff0c;并简化PCB组件空间。DPU02包括了一个USB 2.0全速功能控制器、USB收发器、振荡器、EEPROM和带有完整调制解调控制信号的…

一文详解深度学习冷板式液冷散热技术规范及要求

深度学习 | 东数西算 | 液冷散热 数据挖掘 | 数据分析 | 高性能计算 随着深度学习、东数西算、医药研发、数据分析、数据挖掘、遥感测绘、高性能计算等技术的快速发展&#xff0c;数据中心的创建与日俱增&#xff0c;传统的风冷散热方式已经不同满足数据中心散热的需求&#x…

Huffman二进制编码以及文本的压缩与解压

目录Huffman树转化成二进制编码文本压缩文本解压Huffman树转化成二进制编码 在上一篇博客的末尾&#xff0c;将Huffman树转化成了01 构成的字符串&#xff0c;显然在实际应用中不是这种操作。我们实际想要的是01构成的一串bits&#xff1b;举个例子&#xff1a;字符"A&quo…

HTTP权威指南------URL与资源

目录 URL标准格式 URL快捷方式 动扩展URL 字符 方案详解 web基础中介绍了URI、URL与URN&#xff1b; URI是一类更通用的资源标识符&#xff0c;URL是它的一个子集&#xff1b; URI是一个通用的概念&#xff0c;它主要由URL与URN组成&#xff1b; URL是通过描述资源的位…

【Kafka】Linux下搭建kafka服务,完整学习案例

【Kafka】Linux下搭建kafka服务&#xff0c;完整学习代码案例&#xff08;一&#xff09;Kafka架构基础【1】图解kafka是什么&#xff1f;&#xff08;1&#xff09;为什么需要消息队列&#xff08;2&#xff09;Topic主题&#xff08;3&#xff09;分区&#xff08;4&#xff…

【UE4 第一人称射击游戏】06-设置动画角色2

步骤&#xff1a; 1.打开“WalkRun_BS”&#xff0c;将最左边中间的点和最右边中间的点的动画改为“walk_backward_inPlace” 2.打开“SWAT_AnimBP”&#xff0c;双击“Walk_Run” 双击“Walk_Run” 将混合空间“WalkRun_BS”拖入 将“Direction”和“Speed”提升为变量&#…

车载以太网 - 初识DoIP - 01

1、DoIP是什么? 从表达形式上 它就是UDS诊断套上车载以太网的马甲,然后实现UDS诊断的所有内容。通过下图DoIP的报文帧格式,从下面往上看,最尾部的数据我们能够很清晰的看到,User Data实际上就是UDS诊断数据,比如:10 03亦或是22 F1 86等信息。然后再往前就是源地址和目标…

Python通过Spleeter实现音唱人声(歌声)伴奏分离

程序示例精选 Python实现音唱人声(歌声)伴奏分离 如需安装运行环境或远程调试&#xff0c;见文章底部微信名片&#xff0c;由专业技术人员远程协助&#xff01; 前言 这篇博客针对《Python实现音唱人声(歌声)伴奏分离》编写代码&#xff0c;功能包括了人声(歌声)-伴奏分离。运…

Dubbo、Spring Cloud和kubernetes该如何选型?

文章目录背景微服务的公共关注点微服务平台的选型横向比对微服务优劣比对背景 做技术选型。如果缺乏足够的经验&#xff0c;对so a啊&#xff0c;微服架构原理以及整个行业服务化演进的历史缺乏了解。 那么&#xff0c;对这个三个产品该如何选择啊&#xff1f;的确会感到困惑。…

想做副业怎么才能找到适合的项目,六条建议让你找副业不再迷茫

大家好&#xff0c;我是蝶衣王的小编 现在疫情反复&#xff0c;赚钱太难了。许多年轻人想发展副业。而现实情况往往是不知道做什么以及如何做&#xff0c;这是非常令人困惑的。我在这里分享六个要点&#xff0c;让你找到合适的项目。 六个步骤分别是 会观察、观察相关信息和赚…

有趣的网站分享——福音戰士標題生成器

说起文字标题生成器其实也是有一定的历史了。 他们往往源于某种媒介所带来的个性化标题的出现&#xff08;比如动画或电影、广告、产品Logo等&#xff09;。 被互联网群众察觉分享后在模因传播的现象下深入人心。 比如下面这样的&#xff1a; 就出自知名交友网站P…… 额咳。…

快速入门Spring MVC 一篇就够了

前言 我们前面学习了Spring两大核心机制IoC和AOP&#xff0c;接下来我们一起来学习Spring MVC。这篇文章带你快速入门Spring MVC。 Spring MVC概述 Spring MVC是目前主流的实现MVC设计模式的框架&#xff0c;是Spring框架的一个分支产品&#xff0c;以Spring loC容器为基础&…

Fabric.js 铅笔笔刷

本文简介 点赞 关注 收藏 学会了 fabric.js 的铅笔其实是继承基础画笔的一个工具&#xff0c;在基础画笔的基础上多了“拐角平滑度”等配置项。 本文讲解铅笔的基础用法以及常用事件。 常规配置 真实世界的铅笔有不同的型号&#xff0c;颜色的深浅、笔芯的硬度都是不同的…