欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Mybatis-plus分頁查詢不生效問題排查全過程

 更新時間:2023年03月15日 11:24:09   作者:追尋上飛  
最近寫分頁的時候,遇到了分頁無法正常發(fā)揮作用的問題,下面這篇文章主要給大家介紹了關(guān)于Mybatis-plus分頁查詢不生效問題排查的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下

一、問題描述

在查詢的時候,發(fā)現(xiàn)點(diǎn)擊后臺的分頁器數(shù)字,第2頁時候,數(shù)據(jù)還是和第1頁的一致。就看后臺的數(shù)據(jù)庫打印語句,如下所示。點(diǎn)擊第一頁和第二頁都是這個,limit后的參數(shù)只有一個,前期做過類似,點(diǎn)擊第二頁分頁的時候,語句是LIMIT ?,?

ON ap.id = a.project_id ORDER BY a.create_time DESC LIMIT ?

二、分析步驟

1.首先開始懷疑的是自己的分頁對象出現(xiàn)了問題,因?yàn)镸ySQL ORM框架使用了JPA框架遺留的代碼。將spring-data的分頁對象org.springframework.data.domain.Pageable轉(zhuǎn)成了mybatis-plus的分頁對象com.baomidou.mybatisplus.extension.plugins.pagination.Page<T>。

debug后,Page<T>的 current 和 size 都是存在且對應(yīng)前臺傳來的值。

2.接著懷疑是mybatis-plus的攔截器順序問題,因?yàn)轫?xiàng)目里寫了數(shù)據(jù)權(quán)限的攔截器,在研究數(shù)據(jù)權(quán)限攔截器的時候就看到有說攔截器添加順序會影響到SQL語句拼接的正確性。對比了正常的添加順序后,這部分也沒有問題。

   @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();

        //添加數(shù)據(jù)權(quán)限處理器,注意順序,先數(shù)據(jù)權(quán)限再分頁
        MyDataPermissionInterceptor dataPermissionInterceptor = new MyDataPermissionInterceptor();
        // 添加自定義的數(shù)據(jù)權(quán)限處理器
        dataPermissionInterceptor.setDataPermissionHandler(new MyDataPermissionHandler());
        interceptor.addInnerInterceptor(dataPermissionInterceptor);

        interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
        return interceptor;
    }

3.發(fā)現(xiàn)這兩部分都沒問題后,決定還是debug一下分頁攔截器。

重要的分頁SQL語句拼接函數(shù)如下。

DialectModel model = dialect.buildPaginationSql(buildSql, page.offset(), page.getSize());

進(jìn)入到里面,這里數(shù)據(jù)庫使用的MySQL。

public class MySqlDialect implements IDialect {

    @Override
    public DialectModel buildPaginationSql(String originalSql, long offset, long limit) {
        StringBuilder sql = new StringBuilder(originalSql).append(" LIMIT ").append(FIRST_MARK);
        if (offset != 0L) {
            sql.append(StringPool.COMMA).append(SECOND_MARK);
            return new DialectModel(sql.toString(), offset, limit).setConsumerChain();
        } else {
            return new DialectModel(sql.toString(), limit).setConsumer(true);
        }
    }
}

可以看到偏移量offset至關(guān)重要,決定了拼接的條件判斷。

又發(fā)現(xiàn),offet的值和current相關(guān),根據(jù)排查結(jié)果來看,current 是正常傳值的。

default long offset() {
        long current = this.getCurrent();
        return current <= 1L ? 0L : Math.max((current - 1L) * this.getSize(), 0L);
    }

因此到這里我們就會發(fā)現(xiàn),是offset的真實(shí)值不正確。

當(dāng)后臺前端頁面?zhèn)鱽淼?code>current 是0時,offset等于0。

當(dāng)后臺前端頁面?zhèn)鱽淼?code>current 是1時,offset依舊等于0

而回到拼接函數(shù)buildPaginationSql中,不等于0的時候才會有 兩個參數(shù)的拼接。

至此,這個問題解決了,就是在對象轉(zhuǎn)換時,沒有對current的值進(jìn)行 + 1

三、解決方案

public class MyPage<T> extends Page<T> {

    /**
     * @Description: 將spring的分頁對象轉(zhuǎn)成Mybatis
     * @param pageable:
     * @return: null
     **/
    public MyPage(Pageable pageable) {
        this.setSize(pageable.getPageSize());
        this.setCurrent(pageable.getPageNumber() + 1);
    }
}

四、總結(jié)

  • 多用編譯器的debug
  • 細(xì)節(jié)問題還是要注意,哪怕一個變量

到此這篇關(guān)于Mybatis-plus分頁查詢不生效問題排查的文章就介紹到這了,更多相關(guān)Mybatis-plus分頁查詢不生效內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • maven國內(nèi)鏡像配置的方法步驟

    maven國內(nèi)鏡像配置的方法步驟

    這篇文章主要介紹了maven國內(nèi)鏡像配置的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • JVM垃圾回收算法的概念與分析

    JVM垃圾回收算法的概念與分析

    這篇文章主要給大家介紹了關(guān)于JVM垃圾回收算法的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用JVM具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • springboot集成Mybatis的詳細(xì)教程

    springboot集成Mybatis的詳細(xì)教程

    今天給大家?guī)淼倪€是關(guān)于springboot的相關(guān)知識,文章圍繞著springboot集成Mybatis的詳細(xì)教程展開,文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下
    2021-06-06
  • IntelliJ IDEA 最常用的配置圖文詳解

    IntelliJ IDEA 最常用的配置圖文詳解

    這篇文章給大家分享了IntelliJ IDEA 詳細(xì)圖解最常用的配置的相關(guān)知識點(diǎn)內(nèi)容,有需要的朋友們可以參考學(xué)習(xí)下。
    2018-07-07
  • IDEA2020.3創(chuàng)建web工程的完整步驟

    IDEA2020.3創(chuàng)建web工程的完整步驟

    這篇文章主要給大家介紹了關(guān)于IDEA2020.3創(chuàng)建web工程的完整步驟,文中通過圖文介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • ssm框架下web項(xiàng)目,web.xml配置文件的作用(詳解)

    ssm框架下web項(xiàng)目,web.xml配置文件的作用(詳解)

    下面小編就為大家?guī)硪黄猻sm框架下web項(xiàng)目,web.xml配置文件的作用(詳解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10
  • Java設(shè)計(jì)模式之訪問者模式使用場景及代碼示例

    Java設(shè)計(jì)模式之訪問者模式使用場景及代碼示例

    這篇文章主要介紹了Java設(shè)計(jì)模式之訪問者模式使用場景及代碼示例,小編覺得還是挺不錯的,這里分享給大家,供需要的朋友參考。
    2017-11-11
  • SpringBoot?項(xiàng)目瘦身maven/gradle詳解

    SpringBoot?項(xiàng)目瘦身maven/gradle詳解

    這篇文章主要介紹了SpringBoot項(xiàng)目瘦身(maven/gradle),本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-01-01
  • 關(guān)于Mybatis使用collection分頁問題

    關(guān)于Mybatis使用collection分頁問題

    項(xiàng)目中mybatis分頁的場景是非常高頻的,當(dāng)使用ResultMap并配置collection做分頁的時候,我們可能會遇到獲取當(dāng)前頁的數(shù)據(jù)少于每頁大小的數(shù)據(jù)問題。接下來通過本文給大家介紹Mybatis使用collection分頁問題,感興趣的朋友一起看看吧
    2021-11-11
  • Java ObjectMapper使用詳解

    Java ObjectMapper使用詳解

    ObjectMapper類是Jackson的主要類,它可以幫助我們快速的進(jìn)行各個類型和Json類型的相互轉(zhuǎn)換,本文給大家介紹Java ObjectMapper的相關(guān)知識,感興趣的朋友跟隨小編一起看看吧
    2024-07-07

最新評論