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

MyBatis分頁插件PageHelper的具體使用

 更新時(shí)間:2019年02月20日 09:41:15   作者:RainNenya  
這篇文章主要介紹了MyBatis分頁插件PageHelper的具體使用,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧

MyBatis分頁插件PageHelper

如果你也在用 MyBatis,建議嘗試該分頁插件,這一定是最方便使用的分頁插件。分頁插件支持任何復(fù)雜的單表、多表分頁。

PageHelper是一個(gè)Mybatis的分頁插件, 負(fù)責(zé)將已經(jīng)寫好的sql語句, 進(jìn)行分頁加工.

PageHelper的使用

優(yōu)點(diǎn):無需你自己去封裝以及關(guān)心sql分頁等問題,使用很方便,前端取數(shù)據(jù)也很方便。

1.引入pagehelper依賴

<dependency>
  <groupId>com.github.pagehelper</groupId>
  <artifactId>pagehelper</artifactId>
  <version>5.1.2<ersion>
</dependency>

2.配置applicationContext.xml文件

在spring的sqlsessionfactorybean中增加一個(gè)分頁攔截器屬性
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
  <property name="plugins">
        <array>
          <bean class="com.github.pagehelper.PageInterceptor">
            <property name="properties">
              <value>
                <!-- 這里設(shè)定你的數(shù)據(jù)庫類型 -->
                helperDialect=mysql
              </value>
            </property>
          </bean>
        </array>
  </property>
</bean>

3.調(diào)用PageHelper的方法

在service方法中調(diào)用PageHelper的靜態(tài)方法startPage(注意一定要在實(shí)際查詢數(shù)據(jù)庫之前調(diào)用該方法),傳入需要查詢的頁號和每頁大小,返回PageHelper插件提供的PageInfo對象。即可自動(dòng)完成數(shù)據(jù)庫物理分頁,無須在你的sql語句中手工加limit子句

4. PageInfo的結(jié)構(gòu)

關(guān)于PageInfo的結(jié)構(gòu)請參看源碼,這里通過返回的json來展示。根據(jù)需要取PageInfo對象的相應(yīng)屬性即可。

5.PageInfo類說明

類源碼(更多源碼去github上查看即可):

public class PageInfo<T> implements Serializable {
  private static final long serialVersionUID = 1L;
  //當(dāng)前頁
  private int pageNum;
  //每頁的數(shù)量
  private int pageSize;
  //當(dāng)前頁的數(shù)量
  private int size;
 
  //由于startRow和endRow不常用,這里說個(gè)具體的用法
  //可以在頁面中"顯示startRow到endRow 共size條數(shù)據(jù)"
 
  //當(dāng)前頁面第一個(gè)元素在數(shù)據(jù)庫中的行號
  private int startRow;
  //當(dāng)前頁面最后一個(gè)元素在數(shù)據(jù)庫中的行號
  private int endRow;
  //總記錄數(shù)
  private long total;
  //總頁數(shù)
  private int pages;
  //結(jié)果集
  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;
  //導(dǎo)航頁碼數(shù)
  private int navigatePages;
  //所有導(dǎo)航頁號
  private int[] navigatepageNums;
  //導(dǎo)航條上的第一頁
  private int navigateFirstPage;
  //導(dǎo)航條上的最后一頁
  private int navigateLastPage;
 
  public PageInfo() {
  }
 
  /**
   * 包裝Page對象
   *
   * @param list
   */
  public PageInfo(List<T> list) {
    this(list, 8);
  }
 
  /**
   * 包裝Page對象
   *
   * @param list     page結(jié)果
   * @param navigatePages 頁碼數(shù)量
   */
  public PageInfo(List<T> list, int navigatePages) {
    if (list instanceof Page) {
      Page page = (Page) list;
      this.pageNum = page.getPageNum();
      this.pageSize = page.getPageSize();
 
      this.pages = page.getPages();
      this.list = page;
      this.size = page.size();
      this.total = page.getTotal();
      //由于結(jié)果是>startRow的,所以實(shí)際的需要+1
      if (this.size == 0) {
        this.startRow = 0;
        this.endRow = 0;
      } else {
        this.startRow = page.getStartRow() + 1;
        //計(jì)算實(shí)際的endRow(最后一頁的時(shí)候特殊)
        this.endRow = this.startRow - 1 + this.size;
      }
    } else if (list instanceof Collection) {
      this.pageNum = 1;
      this.pageSize = list.size();
 
      this.pages = this.pageSize > 0 ? 1 : 0;
      this.list = list;
      this.size = list.size();
      this.total = list.size();
      this.startRow = 0;
      this.endRow = list.size() > 0 ? list.size() - 1 : 0;
    }
    if (list instanceof Collection) {
      this.navigatePages = navigatePages;
      //計(jì)算導(dǎo)航頁
      calcNavigatepageNums();
      //計(jì)算前后頁,第一頁,最后一頁
      calcPage();
      //判斷頁面邊界
      judgePageBoudary();
    }
  }
 
 
.......
}

這里只列出所有屬性和構(gòu)造方法,那么可以清晰的看到一些屬性的含義,一些屬性是如何初始化,并且初始化值是怎樣的,更多詳細(xì)情況可以自己去查看源碼,都有中文注釋

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論