Mybatis分頁查詢total中的坑


寫在前面

今天用mybatis進行分頁查詢,大家應該都用過pageHelper這個插件,但是在計算總的數據數的時候,page.getTotal()總是返回0,要么就是返回pageSize(),今天給大家分享一下實用的解決辦法

安裝PageHelper

<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper</artifactId>
    <version>5.1.8</version>
</dependency>
<dependency>
    <groupId>com.github.jsqlparser</groupId>
    <artifactId>jsqlparser</artifactId>
    <version>1.2</version>
</dependency>

jsqlparser這個包官方的解釋是:JsqlParser插件用來對於SQL語句進行解析和組裝,將SQL語句關鍵詞之間的內容用List 進行保存,同時可以進行更改List 的內容后重新組裝成一個新的SQL語句
不知道不添加這個包對分頁有沒有影響(手動滑稽.jpg)

配置到spring和mybatis整合的配置文件中

在mybatis-config.xml文件中配置

<!--    配置pageHelper-->
    <plugins>
        <plugin interceptor="com.github.pagehelper.PageInterceptor">
            //設置數據庫方言
            <property name="helperDialect" value="mysql"/>
            //開啟查詢合理化,比如數據只有100頁,你查詢150頁,顯示第100也
            //如果不開啟的話,你查詢150頁就會顯示空白  
            <property name="reasonable" value="true"/>
        </plugin>
    </plugins>

方法調用

使用PageHelper.startPage 靜態方法調用startPage
特點:

  1. 靜態方法,傳遞兩個參數(當前頁碼,每頁查詢條數)
  2. 使用pageHelper 分頁的時候,不再關注分頁語句,查詢全部的語句
  3. 自動的對PageHelper.startPage 方法下的第一個sql 查詢進行分頁
    PageHelper.startPage(1,5);
    //緊跟着的第一個select 方法會被分頁
    List<User> list = userMapper.findAll();

獲取total

public PageInfo findPage(int page,int pageSize){
  PageHelper.startPage(page,pageSize);
  List<User> List=userMapper.selectAll();
  PageInfo pageInfo = new PageInfo(list);
  return pageInfo;
 }
  

返回的信息就是pageInfo對象,該類是插件里的類,這個類里面的屬性還是值得看一下

public class PageInfo<T> implements Serializable {
private static final long serialVersionUID = 1L;
//當前頁
private int pageNum;
//每頁的數量
private int pageSize;
//當前頁的數量
private int size;
//由於startRow 和endRow 不常用,這里說個具體的用法
//可以在頁面中"顯示startRow 到endRow 共size 條數據"
//當前頁面第一個元素在數據庫中的行號
private int startRow;
//當前頁面最后一個元素在數據庫中的行號
private int endRow;
//總記錄數
private long total;
//總頁數
private int pages;
//結果集
private List<T> list;
//前一頁
private int prePage;
//下一頁
private int nextPage;
//是否為第一頁
private boolean isFirstPage = false;
//是否為最后一頁
private boolean isLastPage = false;
//是否有前一頁
private boolean hasPreviousPage = false;
//是否有下一頁
private boolean hasNextPage = false;
//導航頁碼數
private int navigatePages;
//所有導航頁號
private int[] navigatepageNums;
//導航條上的第一頁
private int navigateFirstPage;
//導航條上的最后一頁
private int navigateLastPage;
}

在Controller層取出數據

//查詢的總條數
long total = pageInfo.getTotal();
//取出數據
List list = pageInfo.getList():

我是末尾

祝大家的代碼永無bug!!!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM