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

PageHelper是一個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中增加一個分頁攔截器屬性
<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對象。即可自動完成數(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不常用,這里說個具體的用法
//可以在頁面中"顯示startRow到endRow 共size條數(shù)據(jù)"
//當(dāng)前頁面第一個元素在數(shù)據(jù)庫中的行號
private int startRow;
//當(dāng)前頁面最后一個元素在數(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(最后一頁的時候特殊)
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í)有所幫助,也希望大家多多支持腳本之家。
- Mybatis分頁插件PageHelper手寫實(shí)現(xiàn)示例
- Mybatis第三方PageHelper分頁插件的使用與原理
- SpringBoot+Mybatis分頁插件PageHelper實(shí)現(xiàn)分頁效果
- Mybatis利用分頁插件PageHelper快速實(shí)現(xiàn)分頁查詢
- Mybatis分頁插件PageHelper配置及使用方法詳解
- Mybatis pagehelper分頁插件使用過程解析
- Mybatis分頁插件PageHelper的配置和簡單使用方法(推薦)
- Mybatis分頁插件PageHelper的使用詳解
- MyBatis分頁插件PageHelper的使用與原理
相關(guān)文章
Spring?IOC?xml方式進(jìn)行工廠Bean操作詳解
這篇文章主要介紹了Spring?IOC?xml方式進(jìn)行工廠Bean操作,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2023-01-01
解析spring-boot-starter-parent簡介
本文通過代碼的形式給大家介紹了spring-boot-starter-parent的基礎(chǔ)知識,需要的朋友可以參考下2018-09-09
如何實(shí)現(xiàn)Java中一個簡單的LinkedList
LinkedList與ArrayList都是List接口的具體實(shí)現(xiàn)類。下面將介紹如何實(shí)現(xiàn)一個簡單的LinkedList,具有很好的參考價(jià)值,下面跟著小編一起來看下吧2017-02-02
SpringMvc靜態(tài)資源訪問實(shí)現(xiàn)方法代碼實(shí)例
這篇文章主要介紹了SpringMvc靜態(tài)資源訪問實(shí)現(xiàn)方法代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08
spring?boot集成jasypt?并實(shí)現(xiàn)自定義加解密的詳細(xì)步驟
由于項(xiàng)目中的配置文件?配置的地方過多,現(xiàn)將配置文件統(tǒng)一放到nacos上集中管理?且密碼使用加密的方式放在配置文件中,配置文件的加密使用加密庫jasypt,本文給大家介紹spring boot集成jasypt并實(shí)現(xiàn)自定義加解密,感興趣的朋友一起看看吧2023-08-08

