MyBatis分頁插件PageHelper的具體使用
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的sqlsessionfactory的bean中增加一個(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)用該方法),傳入需要查詢的頁號(hào)和每頁大小,返回PageHelper插件提供的PageInfo對(duì)象。即可自動(dòng)完成數(shù)據(jù)庫物理分頁,無須在你的sql語句中手工加limit子句

4. PageInfo的結(jié)構(gòu)
關(guān)于PageInfo的結(jié)構(gòu)請(qǐng)參看源碼,這里通過返回的json來展示。根據(jù)需要取PageInfo對(duì)象的相應(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ù)庫中的行號(hào)
private int startRow;
//當(dāng)前頁面最后一個(gè)元素在數(shù)據(jù)庫中的行號(hào)
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)航頁號(hào)
private int[] navigatepageNums;
//導(dǎo)航條上的第一頁
private int navigateFirstPage;
//導(dǎo)航條上的最后一頁
private int navigateLastPage;
public PageInfo() {
}
/**
* 包裝Page對(duì)象
*
* @param list
*/
public PageInfo(List<T> list) {
this(list, 8);
}
/**
* 包裝Page對(duì)象
*
* @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)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Mybatis分頁插件PageHelper手寫實(shí)現(xiàn)示例
- Mybatis第三方PageHelper分頁插件的使用與原理
- SpringBoot+Mybatis分頁插件PageHelper實(shí)現(xiàn)分頁效果
- Mybatis利用分頁插件PageHelper快速實(shí)現(xiàn)分頁查詢
- Mybatis分頁插件PageHelper配置及使用方法詳解
- Mybatis pagehelper分頁插件使用過程解析
- Mybatis分頁插件PageHelper的配置和簡(jiǎn)單使用方法(推薦)
- Mybatis分頁插件PageHelper的使用詳解
- MyBatis分頁插件PageHelper的使用與原理
相關(guān)文章
SpringMVC實(shí)現(xiàn)文件上傳和下載功能
這篇文章主要為大家詳細(xì)介紹了SpringMVC實(shí)現(xiàn)文件上傳和下載功能 ,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-08-08
Maven安裝本地的jar包和創(chuàng)建帶模板的自定義項(xiàng)目的操作過程
這篇文章主要介紹了Maven安裝本地的jar包和創(chuàng)建帶模板的自定義項(xiàng)目,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2024-03-03
SpringCloud啟動(dòng)eureka server后,沒報(bào)錯(cuò)卻不能訪問管理頁面(404問題)
這篇文章主要介紹了SpringCloud啟動(dòng)eureka server后,沒報(bào)錯(cuò)卻不能訪問管理頁面(404問題),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-11-11
java實(shí)現(xiàn)Flappy Bird游戲源代碼
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)Flappy Bird游戲源代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-12-12
詳解Java CompletableFuture使用方法以及與FutureTask的區(qū)別
CompletableFuture實(shí)現(xiàn)了CompletionStage接口和Future接口,前者是對(duì)后者的一個(gè)擴(kuò)展,增加了異步回調(diào)、流式處理、多個(gè)Future組合處理的能力,使Java在處理多任務(wù)的協(xié)同工作時(shí)更加順暢便利2021-10-10
Java 自定義Spring框架與Spring IoC相關(guān)接口分析
Spring框架是由于軟件開發(fā)的復(fù)雜性而創(chuàng)建的。Spring使用的是基本的JavaBean來完成以前只可能由EJB完成的事情。然而,Spring的用途不僅僅限于服務(wù)器端的開發(fā)2021-10-10

