java.lang.ClassCastException: java.util.ArrayList cannot be cast to com.github.pagehelper.Page 异常_花辞树oo的博客-程序员秘密

技术标签: JAVA  

使用 com.github.pagehelper 分页插件 出现上述的错误大致意思就是类型转换错误
使用的是 spring boot 项目要以加载下面的依赖:

   <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
            <version>1.3.0</version>
        </dependency>

大家可以适当的调整版本,也不一定要使用 我上面的版本,可以用最新的。

在执行的过程中为什么会出现如下的异常,在我查看我写的代码后,发现了,执行顺序的问题,在使用 PageHelper.startPage(page,rows); 进行分页后,接下来要执行 查询数据库的代码,只能执行一次,而不能执行多次,比如下面的错误代码:
控制层:

    @GetMapping("/userList")
    @ResponseBody
    public Response listUsers(int  page, int rows){
        PageHelper.startPage(page,rows);
        PageInfo<User> users = new PageInfo<User>(iUserService.listUsers());
        return response.success("查询成功!", users);
    }

调用的service层:

    public Page<User> listUsers(String type, String realName, String account, String status) {
        QueryWrapper queryWrapper = new QueryWrapper();
        Map<String, String> map = new HashMap<>();
        map.put("realname",realName);
        List<Map<String,Object>> users = baseMapper.selectUserList(map); //这里查询了一次数据库
        return (Page<User>)baseMapper.selectList(queryWrapper); //这里又进行了一次查询 分页插件不知道以谁为准
    }

这里如果我们要正确,其实很简单 把 PageHelper.startPage(page,rows); 分页放到service层中 正确写法就是

    public Page<User> listUsers(int page,int rows,String type, String realName, String account, String status) {
        QueryWrapper queryWrapper = new QueryWrapper();
        Map<String, String> map = new HashMap<>();
        map.put("realname",realName);
        List<Map<String,Object>> users = baseMapper.selectUserList(map);
        PageHelper.startPage(page,rows)
        return (Page<User>)baseMapper.selectList(queryWrapper); 
    }

这样子查询就不会出问题了,所以避免出上述的问题,大家还是把进行分页的代码,都放到service层中进行分页就好了。
究其原因就在于pageHelper是通过mybatis的pulgin实现了Interceptor接口:
在这里插入图片描述
如果在service层中只有一次查询,那么写在控制层是没有什么问题的,但是有多次查询的话,那么就必须得把分页插件放到最后一条查询前面,这样才能避免上述异常。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qrn196789910/article/details/109593669

智能推荐

2017第一周竞赛考试总结(NOIP2010)_ODPOOP的博客-程序员秘密

第一周竞赛题目解法小结*1。机器翻译**对于这道题其实没有什么好说的,就是一道十足的大水题(゚ー゚),运用队列加上一个判断存在的数组来快速查寻即可,需要注意的是此处的数据较小,可以只用将队列的空间开的大一些,但如果以后遇见数据较大的队列题时需要用到循环队列 一下便是实现代码:#include<cstdio>#include<cstring>#include<iostream>#def

python分析excel(column判断写入,复制excel等)_Virgil_Ko的博客-程序员秘密

import openpyxlfrom datetime import datetime,timedeltaimport pandas as pdimport os, sys,re,shutiltt = datetime.now().timetuple()today = str(tt.tm_year)+'-'+str(tt.tm_mon)+'-'+str(tt.tm_mday)p...

编译arm-linux-gdb和远程调试arm板程序_编译gdb arm-linux x64_Nightsong_cc的博客-程序员秘密

注:arm-linux-gdb的安装路径是/usr/local/arm-gdb1、arm-linux-gdb的编译安装下载gdb-6.8.tar.bz2至工作目录gdb源码下载:http://ftp.gnu.org/gnu/gdb/命令如下:$tar -jxvf gdb-6.8.tar.bz2$cd gdb-6.8$./configure --target=arm-linux --e

Oracle错误代码大全_wayz11的博客-程序员秘密

ORA-00001: 违反唯一约束条件 (.)   ORA-00017: 请求会话以设置跟踪事件   ORA-00018: 超出最大会话数   ORA-00019: 超出最大会话许可数   ORA-00020: 超出最大进程数 ()   ORA-00021: 会话附属于其它某些进程;无法转换会话   ORA-00022: 无效的会话 ID;访问被拒绝   ORA-00023: 会话引用进程私用内存

Error inflating class android.support.v17.leanback.widget.PlaybackControlsRowView_Hedy Chen的博客-程序员秘密

遇到一个坑货问题:使用 leanback V17 的包,添加控件到页面上,结果出现了crash, crash信息如下:android.view.InflateException: Binary XML file line #21 in org.droidtv.musicplayer:layout/lb_playback_controls_row: Binary XML file line #21 in org.droidtv.musicplayer:layout/lb_playback_contr.

随便推点

使用virsh 管理kvm虚拟机_body221的博客-程序员秘密

kvm是当前最流行的开源虚拟化解决方案之一,也是redhat官方支持的虚拟化方案,从kernel 2.6开始,linux内核默认支持kvm模块。 kvm是内核模块,是连接用户和虚拟机的接口,真正模拟出硬件的是qemu。 kvm本身也有管理虚拟机的接口程序:qemu-system 不过当前比较主流的管理软件是Libvirtd,通过此进程...

[zt]解决IE9弹出微软说明的办法_weixin_30915275的博客-程序员秘密

首先win+R调出运行对话框 输入gpedit.msc 用户配置—管理模板—windows组件—internet explorer 双击 找到阻止首次运行自定义设置 右击 编辑 在右边选择 启用 在下面的“选择所需选项中”点击直接转到主页即可。转载于:https://www.cnblogs.com/daixiaohu1988/archive/2012/03/05/2380...

(转)HttpURLConnection与 HttpClient 区别_httpurlconnection和httpclient_PacosonSWJTU的博客-程序员秘密

转自:HttpURLConnection与 HttpClient 区别/性能测试对比 - 尚码园HttpURLConnection与HttpClient随笔   目前在工做中遇到的须要各类对接接口的工做,须要用到HTTP的知识,工做完成后想要作一些笔记,原本知识打算把本身写的代码粘贴上来就行了,https://www.shangmayuan.com/a/6ee68d2d1c9b4606bf618dfd.html【README】本文总结了 HttpURLConnection, HttpClient

混进iOS 14.3!网友爆出苹果CSAM检测技术出现哈希冲突_程序员大咖的博客-程序员秘密

????????关注后回复“进群”,拉你进程序员交流群????????来源丨新智元新智元报道来源:Reddit编辑:Priscilla 好困【新智元导读】苹果计划推出在iOS ...

华为云IoT平台——profile插件开发_multimicro的博客-程序员秘密

借助华为云IoT平台,介绍profile插件的开发流程

pnpm安装报错request to http://registry.cnpmjs.org/pnpm failed_pnpm安装失败_John咸鱼的博客-程序员秘密

一.npm install pnpm -g报错如图二.解决方法1.先安装cnpm并且配置淘宝镜像npm install -g cnpm --registry=https://registry.npm.taobao.org 2.用cnpm install pnpm -g安装pnpmcnpm install pnpm -g3.检查pnpm是否安装成功pnpm -v注:如果提示当前版本则安装成功4.pnpm设置源查看源pnpm config get registry 切