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练习生》

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

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

相关文章

Hugging Face创始人分享:企业如何在ChatGPT浪潮下实现战略布局

Hugging Face创始人兼首席执行官 Clem Delangue在IBM一年一度的 THINK大会中研讨了当前人工智能发展趋势&#xff0c;特别是ChatGPT模型以及其对行业的影响。他的演讲还涉及到一个关键的议题&#xff0c;在ChatGPT这样的通用模型出现后&#xff0c;企业如何在人工智能领域找到自…

QR 分解cpu程序

1. 代码 Makefile EXE : hello_qrSRC_QR qr_main.c qr_func.c $(EXE): $(SRC_QR)gcc $^ -o $ -lm.PHONY: clean clean:-rm -rf $(EXE) qr_main.c #include "stdio.h"int maqr(double* a,int m,int n,double* q);int main() {int i,j;static double q[4][4],a[4]…

全能相似度计算与语义匹配搜索工具包,多维度实现多种算法,涵盖文本、图像等领域。支持文图搜索,满足您在不同场景下的搜索需求

全能相似度计算与语义匹配搜索工具包,多维度实现多种算法,涵盖文本、图像等领域。支持文图搜索,满足您在不同场景下的搜索需求。 Similarities:精准相似度计算与语义匹配搜索工具包,多维度实现多种算法,覆盖文本、图像等领域,支持文搜、图搜文、图搜图匹配搜索 Similar…

window下如何安装ffmpeg(跨平台多媒体处理工具)

ffmpeg是什么? FFmpeg是一个开源的跨平台多媒体处理工具&#xff0c;可以用于录制、转换和流媒体处理音视频。它包含了几个核心库和工具&#xff0c;可以在命令行下执行各种音视频处理操作&#xff0c;如剪辑、分割、合并、媒体格式转换、编解码、流媒体传输等。FFmpeg支持多…

C++类和对象引入以及类的介绍使用

文章目录 一、面向过程和面向对象的初步认识二、类的引入2.2 类的引入 三、类的访问限定符及封装3.3 访问限定符3.4 【面试题】C中struct和class的区别3.5 类的两种定义方式 四、封装【面试题】面向对象的三大特性 五、类的作用域六、类的实例化七、类对象模型7.1 类对象的存储…

postman之接口参数签名(js接口HMAC-SHA256签名)

文章目录 postman之接口参数签名&#xff08;js接口签名&#xff09;一、需求背景二、签名生成规则三、postman js接口签名步骤1. postman设置全局、或环境参数2. 配置Pre-request Scripts脚本 四、Pre-request Scripts脚本 常见工作整理1. js获取unix时间戳2. body json字符串…

day35WEB 攻防-通用漏洞XSS 跨站反射存储DOMBeef-XSS

目录 一&#xff0c;XSS 跨站-原理&分类&手法&探针 1、原理 2、分类 3、危害 二&#xff0c;反射型XSS 1&#xff0c;案例演示 三&#xff0c;存储型XSS 1&#xff0c;案例演示 四&#xff0c;DOM 型XSS 五&#xff0c;XSS 利用环境-XSS 平台&Beef-XS…

探讨UI自动化测试几步骤

随着软件开发的不断发展&#xff0c;UI自动化测试变得越来越重要&#xff0c;它能够提高测试效率、降低人为错误&#xff0c;并确保软件交付的质量。本文将介绍UI自动化测试的一般步骤和一些最佳实践&#xff0c;以帮助开发团队更好地实施自动化测试。 需求分析和选择测试工具&…

QT+VS实现Kmeans++

1、Kmeans的原理如下&#xff1a; &#xff08;1&#xff09;首先选取样本中任一数据点作为第一个聚类中心&#xff1b; &#xff08;2&#xff09;计算样本每一个数据点至现所有聚类中心的最近距离&#xff0c;并记录下来&#xff1b; &#xff08;3&#xff09;逐一挑选所…

电脑监控软件:提升工作效率与保障信息安全

随着信息技术的飞速发展&#xff0c;电脑已经成为了我们日常生活和工作中不可或缺的工具。然而&#xff0c;随着电脑使用频率的增加&#xff0c;工作效率低下、信息泄露等问题也日益凸显。为了解决这些问题&#xff0c;电脑监控软件应运而生&#xff0c;为我们的工作和生活提供…

基于vue实现待办清单案例

一、需求 新增内容&#xff1b; 删除内容&#xff1b; 统计操作&#xff1b; 清空数据。 示例图&#xff1a; 二、代码演示 1、基础准备 index.css代码 html, body {margin: 0;padding: 0; } body {background: #fff ; } button {margin: 0;padding: 0;border: 0;backgr…

马斯克将为 X 平台设立内容审核中心;Google Bard 冲上 LLM 排行榜第二

马斯克旗下社交媒体平台 X&#xff08;原 Twitter&#xff09;的业务运营主管 Joe Benarroch 表示&#xff0c;将在得州奥斯汀设立一个新的内容审核中心&#xff0c;招募 100 名全职员工。 该中心将重点打击平台上虐待儿童相关内容&#xff0c;并执行平台的仇恨言论限制政策&am…

雪深传感器的工作原理

TH-XL2雪深传感器的工作原理主要是利用超声波的发射和反射来测量雪的厚度。传感器发射超声波&#xff0c;超声波遇到雪表面后会反射回来&#xff0c;传感器再接收反射回来的超声波&#xff0c;通过计算超声波的传播时间和速度&#xff0c;就可以得出雪的厚度。 另外&#xff0c…

幻兽帕鲁服务器价格,这个价格不够电费的

幻兽帕鲁服务器价格多少钱&#xff1f;4核16G服务器Palworld官方推荐配置&#xff0c;阿里云4核16G服务器32元1个月、96元3个月&#xff0c;腾讯云换手帕服务器服务器4核16G14M带宽66元一个月、277元3个月&#xff0c;8核32G22M配置115元1个月、345元3个月&#xff0c;16核64G3…

STM32学习笔记(三) —— GPIO点亮LED

1.GPIO简介 GPIO&#xff0c;全称是General-purpose input/output&#xff08;通用输入输出&#xff09;。在单片机中是表示能被控制的引脚&#xff0c;能检测输入信号的高低电平&#xff0c;也能输出高低电平控制外部设备。STM32F103RCT6一共有64个引脚&#xff0c;其中有51个…

SQL注入-sqli-labs-master第一关

实验环境&#xff1a; Nginx.1.15.11 MySQL&#xff1a;5.7.26 实验步骤&#xff1a; 1.第一步&#xff1a; 在id1后加入一个闭合符号&#xff0c;如果报错&#xff0c;再在后面加上 -- 将后面注释掉&#xff0c;如果不报错&#xff0c;则证明为字符型。 http://127.0.0.1/…

(Sping Xml方式整合第三方框架)学习Spring的第十天

Spring整合mybatis 1 . 导入Mybatis整合Spring的相关坐标 <dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.2.13.RELEASE</version></dependency><dependency><…

ps缺少msvcp140.dll要怎么办?多种解决msvcp140.dll的方法分享

当您在尝试打开Adobe Photoshop时&#xff0c;如果遭遇一个典型的错误&#xff1a;“程序无法启动&#xff0c;因缺少MSVCP140.dll文件”&#xff0c;请放心&#xff0c;这并不少见&#xff0c;许多Photoshop用户都可能曾面临过这种情况。处理这个问题实际上是相当简单的。接下…

【数模百科】如何提高数模论文的美观性(附美赛word和LaTeX模板)

有人说&#xff0c; 美赛 美术大赛 某种程度上是这样的。 「论文包装」是美赛的重中之重&#xff0c;如果大家有阅读过往年O奖论文&#xff0c;就会发现所有论文的「美观性」都很强。 比如这篇2019年的神作&#xff0c;花了条恐龙。 好的下面我来教大家如何画恐龙。&#…

优维全面可观测产品能力分解②:变更可观测

上周&#xff0c;我们推出了优维全面可观测能力介绍的系列性文章的第一篇&#xff1a;架构可观测。优维架构可观测是从系统架构的视角来呈现链路与服务的状态数据&#xff0c;点击可回看&#xff1a;架构可观测文章。本周&#xff0c;我们将推出本系列性文章的第二篇&#xff1…