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)用該方法),傳入需要查詢的頁號和每頁大小,返回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í)有所幫助,也希望大家多多支持腳本之家。
- 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)文章
SpringMVC實(shí)現(xiàn)文件上傳和下載功能
這篇文章主要為大家詳細(xì)介紹了SpringMVC實(shí)現(xiàn)文件上傳和下載功能 ,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-08-08Maven安裝本地的jar包和創(chuàng)建帶模板的自定義項(xiàng)目的操作過程
這篇文章主要介紹了Maven安裝本地的jar包和創(chuàng)建帶模板的自定義項(xiàng)目,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2024-03-03SpringCloud啟動(dòng)eureka server后,沒報(bào)錯(cuò)卻不能訪問管理頁面(404問題)
這篇文章主要介紹了SpringCloud啟動(dòng)eureka server后,沒報(bào)錯(cuò)卻不能訪問管理頁面(404問題),具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-11-11java實(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接口,前者是對后者的一個(gè)擴(kuò)展,增加了異步回調(diào)、流式處理、多個(gè)Future組合處理的能力,使Java在處理多任務(wù)的協(xié)同工作時(shí)更加順暢便利2021-10-10Java 自定義Spring框架與Spring IoC相關(guān)接口分析
Spring框架是由于軟件開發(fā)的復(fù)雜性而創(chuàng)建的。Spring使用的是基本的JavaBean來完成以前只可能由EJB完成的事情。然而,Spring的用途不僅僅限于服務(wù)器端的開發(fā)2021-10-10