Mybatis-plus原生pages分页未生效的解决方案
文章目录
- 前言
- 原因
- 1、Mybatis Plus版本的问题
- 2、Mapper.xml文件中SQL语句格式问题
- 3、Mybatis Plus默认分页拦截器问题
- 4、分页参数传参问题
- 5、分页配置的问题
- 解决方案
- 1、升级对应的Mybatis-plus版本
- 分页插件配置问题
- 3、自定义分页拦截器
- 4、正确的参数
- 5、不同版本的配置文件
- 3.4.0之前版本
- 3.4.0之后版本
- 完结
前言
前端小伙伴今天问我们后端同学,说他写得列表有问题,分页数据没有成功,将所有数据都返回给前端了!
后端同学有些懵逼的说,我已经使用了service的pages接口来查询的列表,为什么失败了呢?
各位小伙伴,你们知道怎么解决这个问题吗?先考虑一下。
原因
1、Mybatis Plus版本的问题
当我们使用的是较旧的版本,可能存在分页失效的问题。
解决办法:升级到最新版本。
2、Mapper.xml文件中SQL语句格式问题
在Mapper.xml中书写SQL语句时,当格式错误了,就会导致分页失效。
正确的格式:在最后加上limit #{offset}, #{pageSize}
#{offset}:偏移量;
#{pageSize}:每页显示的数量。
3、Mybatis Plus默认分页拦截器问题
默认情况下,Mybatis Plus自带了一个分页插件com.baomidou.mybatisplus.plugins.PaginationInterceptor。但是,有时候在进行复杂查询时,这个分页插件可能会失效,导致分页查询不到数据。
4、分页参数传参问题
如果使用的是分页查询方法,那么在调用方法时就要传入Page对象,而且必须在此前调用setRecordsTotal方法设置总记录数。如果不设置总记录数,则分页插件无法工作。
5、分页配置的问题
不同版本的mybatis-plus需要的分页配置是不同的,是分水岭版本为3.4.0
在它之后的版本开始将原有的PaginationInterceptor 标记为过时,需要换成MybatisPlusInterceptor
解决方案
上面我们列出了5个导致分页结果失败的原因,接下来我们看看如何解决呢?分别一一对应来看。
1、升级对应的Mybatis-plus版本
如果我们使用的旧版本的Mybatis-plus,则可以升级为新版的。
在pom文件里面更新
<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.3</version>
</dependency>
分页插件配置问题
这个可以按照上面所说的在Mapper.xml文件中调整
<select id="selectForPage" resultMap="BaseResultMap">select * from tb_user<where>1 = 1</where>limit #{offset}, #{pageSize}
</select>
配置Mybatis-plus分页插件,可以在application.yml文件中加入如下配置:
mybatis-plus:configuration:# 分页插件,一般不用修改page-params: pageNum=1;pageSize=10;count=countSql
3、自定义分页拦截器
Mybatis-plus提供了自定义分页拦截器的功能,可以根据我们自己的业务进行自定义。自定义分页拦截器需要继承com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor类,然后在实现intercept方法,在该方法中来处理我们具体的分页逻辑。
例如:可以根据前端传入的分页参数进行分页,而不是使用默认的分页参数。具体代码示例如下:
public class CustomPaginationInterceptor extends PaginationInterceptor {@Overridepublic Page SqlParserInterceptor(MappedStatement ms, Page page) {// 获取前端传入的分页参数Integer pageNum = (Integer) page.get("pageNo");Integer pageSize = (Integer) page.get("pageSize");// 处理分页逻辑int offset = (pageNum - 1) * pageSize;return super.SqlParserInterceptor(ms, new Page(offset, pageSize));}
}
4、正确的参数
假如在调用分页查询方法的时候没有传入Page对象或者是没有调用setRecordsTotal方法设置总条数,则分页查询不到数据。可以采用以下方式正确传参,具体代码如下:
// 分页查询方法
IPage<Test> pageTest = new Page<>(pageNo, pageSize);
// 设置总记录数
pageTest .setRecordsTotal(testMapper.selectCount(null));
// 查询
IPage<Test> pageResult = testMapper.selectPage(pageTest , null);
5、不同版本的配置文件
接下来我们看看不同版本的配置文件具体如何实现
3.4.0之前版本
在启动类中添加Bean,配置类代码如下:
/** Mybatis plus 分页插件 **/@Beanpublic PaginationInterceptor paginationInterceptor() {PaginationInterceptor paginationInterceptor = new PaginationInterceptor();// 设置请求的页面大于最大页后操作, true调回到首页,false 继续请求 默认false// paginationInterceptor.setOverflow(false);// 设置最大单页限制数量,默认 500 条,-1 不受限制paginationInterceptor.setLimit(-1);return paginationInterceptor;}
3.4.0之后版本
配置类代码如下
package com.cafeteria.reservation.admin.config;import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class MyBatisConfig {@Beanpublic MybatisPlusInterceptor paginationInterceptor() {MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
//这是分页拦截器PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor();paginationInnerInterceptor.setOverflow(false);paginationInnerInterceptor.setMaxLimit(500L);mybatisPlusInterceptor.addInnerInterceptor(paginationInnerInterceptor);
//设置请求的页面大于最大页后操作,true调回到首页,false继续请求默认false
// paginationInterceptor.setOverflow(false);//设置最大单页限制数量,默认500条,-1不受限制
//paginationInterceptor.setLimit(500);
//开启 count 的 join 优化,只针对部分 left joinreturn mybatisPlusInterceptor;}
}
完结
今天的内容就到这里,感觉对你有帮助,可以点击下方卡片,关注《coder练习生》
相关文章:

Mybatis-plus原生pages分页未生效的解决方案
文章目录 前言原因1、Mybatis Plus版本的问题2、Mapper.xml文件中SQL语句格式问题3、Mybatis Plus默认分页拦截器问题4、分页参数传参问题5、分页配置的问题 解决方案1、升级对应的Mybatis-plus版本分页插件配置问题3、自定义分页拦截器4、正确的参数5、不同版本的配置文件3.4.…...

【linux】-centos7版本前后-变化篇
1.centos7版本前后区别 首先文件系统变化,由EXT4,变为XFS格式。可支持容量500TB的文件,而6代仅能支持16TB。首个进程变为systemd, 替换了熟悉的init进程。它的特点是功能强大,体积也很强大。 systemd给我们带来了一个全家桶命令&…...

001集—shapefile(.shp)格式详解——arcgis
一、什么是shapefile Shapefile 是一种用于存储地理要素的几何位置和属性信息的非拓扑简单格式。shapefile 中的地理要素可通过点、线或面(区域)来表示。包含 shapefile 的工作空间还可以包含 dBASE 表,它们用于存储可连接到 shapefile 的要…...

ssrf服务器请求伪造漏洞(个人学习)
SSRF前置学习须了解net工作原理 计算机网络 网络地址转换NAT_内部本地地址-CSDN博客 可以看这个来了解 SSRF 攻击的目标:从外网无法访问的内部网络 形成原因:大部分服务器提供了从外部应用获取数据的功能,但是对目标地址没有做过滤和限制…...

【前端web入门第二天】03 表单-下拉菜单 文本域 label标签 按钮 【附注册信息综合案例】
文章目录: 1. 下拉菜单 2. 文本域3.label标签 4.按钮- button 4.1 reset重置按钮结合form表单区域使用 5.无语义的布局标签 6.字符实体 注册信息综合案例 表单第二节 1. 下拉菜单 标签: select嵌套option,select是下拉菜单整体,option是下拉菜单的每一项。 代码…...

回响科技二面面试题解答
面试题 1、你们的数仓中DWD层为什么要划分数据域?划分数据域之后会对ADS层造成什么影响?是可以提效还是可扩展性强?你们是如何考虑的呢? 2、AZkaban和dolphinScheduler的区别是什么?如果选型会从哪几个方面来考虑呢&a…...

node学习过程中的终端命令
冷的哥们手真tm冷,打字都是僵的,屮 目录 一、在学习nodejs过程中用到的终端命令总结 一、在学习nodejs过程中用到的终端命令 node -v nvm install 20.11.0 nvm list nvm list available nvm on nvm -v nvm use 20.11.0 node加要运行的js文件路径 ps&a…...

oracle版本号中的i,G,C代表什么含义
大家都熟悉的 Oracle 版本号有 9i、10G、11G、12C、19C 等,但在早期,Oracle 的版本号并不包含这些字母。 最初,Oracle 的版本号简单地是 1、2、3、4 等,一直发展到 1999 年发布的 8i 版本。20 世纪末是互联网爆发式发展的时代。 …...

Unity2D_角色移动跳跃
水平移动 Rigidbody2D 使用Unity自带的刚体组件,通过修改刚体物品中Rigidbody2D的属性velocity速度来实现物体移动 声明Rigidbody2D属性,以及角色移动速度 public float playerSpeed 5f; private Rigidbody2D rigidbody2D;在Start方法中将rigidbody2D…...

23-GPTs Actions详细解析:如何查找、对接API,及如何编写Schema
目录 1. 挖掘一个API接口,并将其对接到GPTs中1.1 如何寻找API1.2 把API对接到Schema中1.3 Schema中的参数结构本节详细介绍GPTs Actions 中的Schema。如何写、它里面的结构是什么、里面参数的含义。 后续使用GPTs过程中,如何找到自己想要的API,以及如何把找到的API对接到GPT…...

微信小程序canvas画布实现椭圆元素自由缩放、移动功能
目录 实现效果 编辑 一、获取画布信息并绘制背景 二、绘制椭圆...

使用Excel计算--任务完成总工作日时长
(Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu) 引言 计算任务完成时间周期,和计算金钱一样,是一个比较细致严谨的工作。 通常,我们可能以为,完成周期形如: 任务完成周期 任务结束时间 - 任务开始时间 但是…...

JavaWeb后端登录校验功能(JWT令牌技术,Cookie技术,Session,拦截技术,过滤器)
目录 一.登录校验功能(解决直接通过路径访问) 1.实现思路 二.会话技术 编辑 1.Cookie技术 2.Session 3.令牌技术 1.简介 2.如何生成和解析 3.令牌的使用 三.Filter过滤器 1.什么是过滤器 2.实现步骤: 3.过滤器执行流程 4.拦截路径 5.过…...

7-上传下载
上传下载 首先创建一张上传文件的表,例如: drop table if exists sys_file_info; create table sys_file_info (file_id int(11) not null auto_increment comment 文件id,file_name varchar(50) default …...

数字图像处理(实践篇)三十六 OpenCV-Python 使用ORB和BFmatcher对两个输入图像的关键点进行匹配实践
目录 一 涉及的函数 二 实践 ORB(Oriented FAST and Rotated BRIEF)是一种特征点检测和描述算法,它结合了FAST关键点检测和BRIEF描述子。ORB算法具有以下优势: ①实时性:能够在实时应用中进行快速的特征点检测和描述。 ②...

算法每日一题: 边权重均等查询 | 公共子祖先
大家好,我是星恒,今天给大家带来的是一道图里面有关公共子祖先的题目,理解起来简单,大家 题目:leetcode 2846 现有一棵由 n 个节点组成的无向树,节点按从 0 到 n - 1 编号。给你一个整数 n 和一个长度为 n …...

使用JavaScript和XLSX.js将数据导出为Excel文件
目录 一、安装XLSX.js二、将数据转换为Excel文件 导出数据是Web应用程序中常见的功能之一。在许多情况下,我们需要将数据导出为Excel文件,以便用户可以在本地计算机上查看和编辑数据。在本篇博客中,我们将介绍如何使用JavaScript和XLSX.js将数…...

如何使用YOLOv8训练自己的模型
本文介绍如何用YOLO8训练自己的模型,我们开门见山,直接步入正题。 前言:用yolo8在自己的数据集上训练模型首先需要配置好YOLO8的环境,如果不会配置YOLO8环境可以参考本人主页的另一篇文章 提醒:使用GPU训练会大幅度加…...

机器学习-逻辑回归【手撕】
逻辑回归 在模式识别问题中,所输出的结果是分类,比如是否是猫,这时候无法通过简单的线性回归来实现问题。同时,与线性回归不同的是,逻辑回归是一种名为回归的线性分类器,并常用于二分类,其本质…...

内网安全:NTLM-Relay
目录 NTLM认证过程以及攻击面 NTLM Relay攻击 NTLM攻击总结 实验环境说明 域横向移动:NTLM中继攻击 攻击条件 实战一:NTLM中继攻击-CS转发上线MSF 原理示意图 一. CS代理转发 二. MSF架设路由 三. 适用smb_relay模块进行中继攻击 域横向移动…...

Tensorflow2.0笔记 - tensor的padding和tile
本笔记记录tensor的填充和tile操作,对应tf.pad和tf.tile import tensorflow as tf import numpy as nptf.__version__#pad做填充 # tf.pad( tensor,paddings, modeCONSTANT,nameNone) #1维tensor填充 tensor tf.random.uniform([5], maxval10, dtypetf.int32) pri…...

多媒体测试资源
目录 简介自己整理的文件测试资源列表 简介 音视频测试时,需要许多源文件,这里整理了一些.会持续更新.当然可以使用ffmpeg转换获得需要的文件. 如果知道的这方面资源的,在评论区留言. 自己整理的文件 有视频,图片,音频. 链接:https://pan.baidu.com/s/1vatLmWk…...

Wordpress seo优化该怎么做?
Wordpress作为开源管理系统,目前已然是世界上最流行的cms之一,这不仅仅因为他开源,对用户友好,让任何人都能轻而易举的制作网站,更是因为这套程序对于搜索引擎非常友好,是做谷歌seo的不二之选 Wordpress作为…...

Ultraleap 3Di示例Interactable Objects组件分析
该示例代码位置如下: 分析如下: Hover Enabled:悬停功能,手放在这个模型上,会触发我们手放在这个模型上的悬停功能。此时当手靠近模型的时候,手的模型的颜色会发生改变,反之,则不会…...

Vue自定义成功弹窗H5实现类似于小程序的效果
效果图: <div class"father"><div class"success-box" v-if"isSuccess"><img src"../../assets/insure/success-logo.png" alt""><span>{{ successTitle }}</span></div> &…...

Linux之父:我们正在从C语言转向Rust
最近,Linus在“Torvalds 演讲:人工智能对编程的影响”:“我们正在从C语言转向Rust”。 网友讨论: Linus 选择 Rust 是因为,这是一个中长期解决方案,解决了 IT 世界中缺乏 C/C 人员的实际问题,所…...

C++ qt标题栏组件绘制
本博文源于笔者在学习C qt制作的标题栏组件,主要包含了,最小化,最大化,关闭。读者在看到这篇博文的时候,可以直接查看如何使用的,会使用了,然后进行复制粘贴源码部分即可。 问题来源 想要制作…...

Mysql运维篇(三) MySQL备份与恢复
一路走来,所有遇到的人,帮助过我的、伤害过我的都是朋友,没有一个是敌人。如有侵权,请留言,我及时删除! 一、物理备份与逻辑备份 1、物理备份:备份数据文件,转储数据库物理文件到某…...

数字图像处理(实践篇)二十七 Python-OpenCV 滑动条的使用
目录 1 涉及的函数 2 实践 1 涉及的函数 ⒈ setWindowProperty()用于设置GUI应用程序的属性 cv2.setWindowProperty(windowsName, prop_id, prop_value) 参数: ①...

拷贝构造函数的理解
1.拷贝构造函数与构造函数类似,当没有自定义拷贝构造函数的时候,编译器会定义一个拷贝构造函数。 当类对象没有初始化的时候,通过赋值运算符的形式,也是调用拷贝构造函数。 Test aa(100); Test bb aa;//调用拷贝构造函数Test …...