同時使用mybatis和mybatis-plus時,pageHelper失效問題解決

一隻愛閱讀的程式設計師發表於2020-11-02

一、問題由來

  最近剛拿到一個別人的專案,該專案中使用mybatis和mybatis-plus來運算元據庫,我們需要在此基礎上新增新功能。

做功能開發時一切都很順利,我也很快完成了自己負責的模組,然後和前端開始對接。可是在測試時發現一個問題,那就

是後臺返回的資料中,沒有分頁資訊,而我們做的功能又需要分頁資訊。我立馬去進行排查,發現果然如此,確實沒有分

頁資訊。可是為什麼會沒有呢?之前另外一個子系統中都用得好好的,我都是複製、貼上過來的。然後開始分析原因。
二、問題分析

首先是測試,發現確實沒有返回分頁資料,然後打斷點檢視Service中查詢的結果是否有分頁資料返回,檢視的結果是沒有。

問題就是查詢的時候出現的,而且在查詢之前我已經設定了分頁引數如下,

PageHelper.startPage(pageReq.getPageNum(), pageReq.getPageSize());並且也在配置檔案中新增了分頁相關的設定。

pagehelper.helper-dialect=mysql
pagehelper.reasonable=true
pagehelper.support-methods-arguments=true
pagehelper.params=count=countSql
pagehelper.rowBoundsWithCount=true
pagehelper.offsetAsPageNum=true

按理說應該沒問題才對,可實際上確實出現了問題。
三、解決方案

我去百度裡面搜尋了一下,而且也詢問了同事雪球解決方案。一個一個的嘗試,反正暫時也沒有好的解決辦法。

嘗試一在pom.xml檔案中引入pageHlper的啟動依賴,嘗試後沒有解決;

嘗試二新增如下依賴

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
<scope>test</scope>
</dependency>
測試結果沒有解決。
嘗試三新增一個類,這個類用於初始化 PageInterceptor 這個類,這一次嘗試成功,正確返回分頁資料。程式碼如下:
import com.baomidou.mybatisplus.plugins.PaginationInterceptor;
import com.baomidou.mybatisplus.spring.boot.starter.ConfigurationCustomizer;
import com.github.pagehelper.PageInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.Properties;

@Configuration
public class MyBatisPlusConfig {

/*
* 分頁外掛,自動識別資料庫型別
* 多租戶,請參考官網【外掛擴充套件】
*/
@Bean
public PaginationInterceptor paginationInterceptor() {
return new PaginationInterceptor();
}

@Bean
PageInterceptor pageInterceptor(){
PageInterceptor pageInterceptor = new PageInterceptor();
Properties properties = new Properties();
properties.setProperty("helperDialect", "mysql");
pageInterceptor.setProperties(properties); // 由此可進入原始碼,
return pageInterceptor;
}
}
經過反覆的嘗試,終於解決了這個問題,雖然目前還不是太清楚原因。自己的判斷是使用Mybatis-plus的時候,
不會再自動生成PageInterceptor這個類,需要手動生成,所以才導致了不能正常分頁。

相關文章