Mybatis-plus原生pages分頁(yè)未生效的解決方案
前言
前端小伙伴今天問(wèn)我們后端同學(xué),說(shuō)他寫(xiě)得列表有問(wèn)題,分頁(yè)數(shù)據(jù)沒(méi)有成功,將所有數(shù)據(jù)都返回給前端了!
后端同學(xué)有些懵逼的說(shuō),我已經(jīng)使用了service的pages接口來(lái)查詢的列表,為什么失敗了呢?
各位小伙伴,你們知道怎么解決這個(gè)問(wèn)題嗎?先考慮一下。

原因
1、Mybatis Plus版本的問(wèn)題
當(dāng)我們使用的是較舊的版本,可能存在分頁(yè)失效的問(wèn)題。
解決辦法:升級(jí)到最新版本。
2、Mapper.xml文件中SQL語(yǔ)句格式問(wèn)題
在Mapper.xml中書(shū)寫(xiě)SQL語(yǔ)句時(shí),當(dāng)格式錯(cuò)誤了,就會(huì)導(dǎo)致分頁(yè)失效。
正確的格式:在最后加上limit #{offset}, #{pageSize}
#{offset}:偏移量;
#{pageSize}:每頁(yè)顯示的數(shù)量。
3、Mybatis Plus默認(rèn)分頁(yè)攔截器問(wèn)題
默認(rèn)情況下,Mybatis Plus自帶了一個(gè)分頁(yè)插件com.baomidou.mybatisplus.plugins.PaginationInterceptor。但是,有時(shí)候在進(jìn)行復(fù)雜查詢時(shí),這個(gè)分頁(yè)插件可能會(huì)失效,導(dǎo)致分頁(yè)查詢不到數(shù)據(jù)。
4、分頁(yè)參數(shù)傳參問(wèn)題
如果使用的是分頁(yè)查詢方法,那么在調(diào)用方法時(shí)就要傳入Page對(duì)象,而且必須在此前調(diào)用setRecordsTotal方法設(shè)置總記錄數(shù)。如果不設(shè)置總記錄數(shù),則分頁(yè)插件無(wú)法工作。
5、分頁(yè)配置的問(wèn)題
不同版本的mybatis-plus需要的分頁(yè)配置是不同的,是分水嶺版本為3.4.0
在它之后的版本開(kāi)始將原有的PaginationInterceptor 標(biāo)記為過(guò)時(shí),需要換成MybatisPlusInterceptor
解決方案
上面我們列出了5個(gè)導(dǎo)致分頁(yè)結(jié)果失敗的原因,接下來(lái)我們看看如何解決呢?分別一一對(duì)應(yīng)來(lái)看。
1、升級(jí)對(duì)應(yīng)的Mybatis-plus版本
如果我們使用的舊版本的Mybatis-plus,則可以升級(jí)為新版的。
在pom文件里面更新
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.3</version>
</dependency>
2、分頁(yè)插件配置問(wèn)題
這個(gè)可以按照上面所說(shuō)的在Mapper.xml文件中調(diào)整
<select id="selectForPage" resultMap="BaseResultMap">
select * from tb_user
<where>
1 = 1
</where>
limit #{offset}, #{pageSize}
</select>
配置Mybatis-plus分頁(yè)插件,可以在application.yml文件中加入如下配置:
mybatis-plus:
configuration:
# 分頁(yè)插件,一般不用修改
page-params: pageNum=1;pageSize=10;count=countSql
3、自定義分頁(yè)攔截器
Mybatis-plus提供了自定義分頁(yè)攔截器的功能,可以根據(jù)我們自己的業(yè)務(wù)進(jìn)行自定義。自定義分頁(yè)攔截器需要繼承com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor類,然后在實(shí)現(xiàn)intercept方法,在該方法中來(lái)處理我們具體的分頁(yè)邏輯。
例如:可以根據(jù)前端傳入的分頁(yè)參數(shù)進(jìn)行分頁(yè),而不是使用默認(rèn)的分頁(yè)參數(shù)。具體代碼示例如下:
public class CustomPaginationInterceptor extends PaginationInterceptor {
@Override
public Page SqlParserInterceptor(MappedStatement ms, Page page) {
// 獲取前端傳入的分頁(yè)參數(shù)
Integer pageNum = (Integer) page.get("pageNo");
Integer pageSize = (Integer) page.get("pageSize");
// 處理分頁(yè)邏輯
int offset = (pageNum - 1) * pageSize;
return super.SqlParserInterceptor(ms, new Page(offset, pageSize));
}
}
4、正確的參數(shù)
假如在調(diào)用分頁(yè)查詢方法的時(shí)候沒(méi)有傳入Page對(duì)象或者是沒(méi)有調(diào)用setRecordsTotal方法設(shè)置總條數(shù),則分頁(yè)查詢不到數(shù)據(jù)??梢圆捎靡韵路绞秸_傳參,具體代碼如下:
// 分頁(yè)查詢方法 IPage<Test> pageTest = new Page<>(pageNo, pageSize); // 設(shè)置總記錄數(shù) pageTest .setRecordsTotal(testMapper.selectCount(null)); // 查詢 IPage<Test> pageResult = testMapper.selectPage(pageTest , null);
5、不同版本的配置文件
接下來(lái)我們看看不同版本的配置文件具體如何實(shí)現(xiàn)
3.4.0之前版本
在啟動(dòng)類中添加Bean,配置類代碼如下:
/** Mybatis plus 分頁(yè)插件 **/
@Bean
public PaginationInterceptor paginationInterceptor() {
PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
// 設(shè)置請(qǐng)求的頁(yè)面大于最大頁(yè)后操作, true調(diào)回到首頁(yè),false 繼續(xù)請(qǐng)求 默認(rèn)false
// paginationInterceptor.setOverflow(false);
// 設(shè)置最大單頁(yè)限制數(shù)量,默認(rèn) 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 {
@Bean
public MybatisPlusInterceptor paginationInterceptor() {
MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
//這是分頁(yè)攔截器
PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor();
paginationInnerInterceptor.setOverflow(false);
paginationInnerInterceptor.setMaxLimit(500L);
mybatisPlusInterceptor.addInnerInterceptor(paginationInnerInterceptor);
//設(shè)置請(qǐng)求的頁(yè)面大于最大頁(yè)后操作,true調(diào)回到首頁(yè),false繼續(xù)請(qǐng)求默認(rèn)false
// paginationInterceptor.setOverflow(false);//設(shè)置最大單頁(yè)限制數(shù)量,默認(rèn)500條,-1不受限制
//paginationInterceptor.setLimit(500);
//開(kāi)啟 count 的 join 優(yōu)化,只針對(duì)部分 left join
return mybatisPlusInterceptor;
}
}
完結(jié)
到此這篇關(guān)于Mybatis-plus原生pages分頁(yè)未生效的解決方案的文章就介紹到這了,更多相關(guān)Mybatis-plus原生pages分頁(yè)未生效內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- SpringBoot使用mybatis-plus分頁(yè)查詢無(wú)效的問(wèn)題解決
- Mybatis-Plus 多表聯(lián)查分頁(yè)的實(shí)現(xiàn)代碼
- MyBatis-Plus 分頁(yè)查詢以及自定義sql分頁(yè)的實(shí)現(xiàn)
- MyBatis-Plus分頁(yè)插件不生效的解決方法
- 解決mybatis plus 一對(duì)多分頁(yè)查詢問(wèn)題
- MyBatis-Plus實(shí)現(xiàn)分頁(yè)的方法使用詳解
- MyBatis-Plus實(shí)現(xiàn)2種分頁(yè)方法(QueryWrapper查詢分頁(yè)和SQL查詢分頁(yè))
- MyBatis-Plus分頁(yè)時(shí)排序的實(shí)現(xiàn)方法
- Mybatis-Plus如何使用分頁(yè)實(shí)例詳解
- mybatis-plus分頁(yè)無(wú)效問(wèn)題解決
相關(guān)文章
Java之不通過(guò)構(gòu)造函數(shù)創(chuàng)建一個(gè)對(duì)象問(wèn)題
這篇文章主要介紹了Java之不通過(guò)構(gòu)造函數(shù)創(chuàng)建一個(gè)對(duì)象問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-03-03
一文詳解為什么用ElasticSearch以及和傳統(tǒng)數(shù)據(jù)庫(kù)MySQL有什么區(qū)別
Elasticsearch和MySQL都是非常重要的數(shù)據(jù)庫(kù)管理系統(tǒng),它們?cè)诟鞣N應(yīng)用場(chǎng)景中都有著廣泛的應(yīng)用,這篇文章主要介紹了為什么用ElasticSearch以及和傳統(tǒng)數(shù)據(jù)庫(kù)MySQL有什么區(qū)別的相關(guān)資料,需要的朋友可以參考下2025-07-07
Java工廠模式優(yōu)雅地創(chuàng)建對(duì)象以及提高代碼復(fù)用率和靈活性
Java工廠模式是一種創(chuàng)建型設(shè)計(jì)模式,通過(guò)定義一個(gè)工廠類來(lái)封裝對(duì)象的創(chuàng)建過(guò)程,將對(duì)象的創(chuàng)建和使用分離,提高代碼的可維護(hù)性和可擴(kuò)展性,同時(shí)可以實(shí)現(xiàn)更好的代碼復(fù)用和靈活性2023-05-05
零基礎(chǔ)入門學(xué)習(xí)——Spring Boot注解(一)
這篇文章主要介紹了Spring Boot注解學(xué)習(xí)(一)要點(diǎn),非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下吧2017-05-05
SpringCloud zookeeper作為注冊(cè)中心使用介紹
ZooKeeper由雅虎研究院開(kāi)發(fā),是Google Chubby的開(kāi)源實(shí)現(xiàn),后來(lái)托管到Apache,于2010年11月正式成為Apache的頂級(jí)項(xiàng)目。ZooKeeper是一個(gè)經(jīng)典的分布式數(shù)據(jù)一致性解決方案,致力于為分布式應(yīng)用提供一個(gè)高性能、高可用,且具有嚴(yán)格順序訪問(wèn)控制能力的分布式協(xié)調(diào)服務(wù)2022-11-11
AgileBoot?項(xiàng)目?jī)?nèi)統(tǒng)一的錯(cuò)誤碼設(shè)計(jì)分析
這篇文章主要為大家介紹了AgileBoot?項(xiàng)目?jī)?nèi)統(tǒng)一的錯(cuò)誤碼設(shè)計(jì)分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10
SpringBoot-Admin實(shí)現(xiàn)微服務(wù)監(jiān)控+健康檢查+釘釘告警
本文主要介紹了SpringBoot-Admin實(shí)現(xiàn)微服務(wù)監(jiān)控+健康檢查+釘釘告警,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-10-10
SpringBoot集成MongoDB的實(shí)現(xiàn)
本文主要介紹了SpringBoot集成MongoDB的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2025-01-01
Spring如何利用@Value注解讀取yml中的map配置
這篇文章主要介紹了Spring如何利用@Value注解讀取yml中的map配置,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-02-02

