最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Mybatis-plus原生pages分頁(yè)未生效的解決方案

 更新時(shí)間:2024年07月11日 10:45:14   作者:ybb_ymm  
本文主要介紹了Mybatis-plus原生pages分頁(yè)未生效的解決方案,包含介紹了未生效的5種原因以及解決方法,具有一定的參考價(jià)值,感興趣的可以了解一下

前言

前端小伙伴今天問(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)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

亚东县| 札达县| 民县| 花莲市| 西安市| 泰兴市| 济宁市| 泊头市| 本溪市| 平昌县| 丹江口市| 时尚| 开化县| 姜堰市| 朝阳市| 武义县| 拜城县| 南华县| 禄劝| 桂东县| 安福县| 鲁山县| 垫江县| 宾阳县| 芦山县| 滨海县| 永德县| 阜阳市| 巴马| 兴化市| 安新县| 隆昌县| 岳普湖县| 晴隆县| 盘山县| 南宁市| 诸暨市| 攀枝花市| 昭平县| 乐清市| 鹤峰县|