PageHelper的PageInfo使用方法
生活随笔
收集整理的這篇文章主要介紹了
PageHelper的PageInfo使用方法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
自定義標題
- 1.PageHelper的引用
- 2.封裝PageInfo類
- 3.實例
1.PageHelper的引用
pom.xml文件引用
<!-- pagehelper :分頁插件 --> <dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper</artifactId><version>5.1.2</version> </dependency> <!-- pagehelper的依賴包:jsqlparser --> <dependency><groupId>com.github.jsqlparser</groupId><artifactId>jsqlparser</artifactId><version>0.9.5</version> </dependency> <!-- Springboot的PageHelper的啟動器 --><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>1.2.3</version> </dependency>2.封裝PageInfo類
/** The MIT License (MIT)** Copyright (c) 2014-2017 abel533@gmail.com** Permission is hereby granted, free of charge, to any person obtaining a copy* of this software and associated documentation files (the "Software"), to deal* in the Software without restriction, including without limitation the rights* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell* copies of the Software, and to permit persons to whom the Software is* furnished to do so, subject to the following conditions:** The above copyright notice and this permission notice shall be included in* all copies or substantial portions of the Software.** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN* THE SOFTWARE.*/package com.github.pagehelper;import java.io.Serializable; import java.util.Collection; import java.util.List;/*** 對Page<E>結果進行包裝* <p/>* 新增分頁的多項屬性,主要參考:http://bbs.csdn.net/topics/360010907** @author liuzh/abel533/isea533* @version 3.3.0* @since 3.2.2* 項目地址 : http://git.oschina.net/free/Mybatis_PageHelper*/ @SuppressWarnings({"rawtypes", "unchecked"}) 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;public PageInfo() {}/*** 包裝Page對象** @param list*/public PageInfo(List<T> list) {this(list, 8);}/*** 包裝Page對象** @param list page結果* @param navigatePages 頁碼數量*/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();//由于結果是>startRow的,所以實際的需要+1if (this.size == 0) {this.startRow = 0;this.endRow = 0;} else {this.startRow = page.getStartRow() + 1;//計算實際的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;//計算導航頁calcNavigatepageNums();//計算前后頁,第一頁,最后一頁calcPage();//判斷頁面邊界judgePageBoudary();}}/*** 計算導航頁*/private void calcNavigatepageNums() {//當總頁數小于或等于導航頁碼數時if (pages <= navigatePages) {navigatepageNums = new int[pages];for (int i = 0; i < pages; i++) {navigatepageNums[i] = i + 1;}} else { //當總頁數大于導航頁碼數時navigatepageNums = new int[navigatePages];int startNum = pageNum - navigatePages / 2;int endNum = pageNum + navigatePages / 2;if (startNum < 1) {startNum = 1;//(最前navigatePages頁for (int i = 0; i < navigatePages; i++) {navigatepageNums[i] = startNum++;}} else if (endNum > pages) {endNum = pages;//最后navigatePages頁for (int i = navigatePages - 1; i >= 0; i--) {navigatepageNums[i] = endNum--;}} else {//所有中間頁for (int i = 0; i < navigatePages; i++) {navigatepageNums[i] = startNum++;}}}}/*** 計算前后頁,第一頁,最后一頁*/private void calcPage() {if (navigatepageNums != null && navigatepageNums.length > 0) {navigateFirstPage = navigatepageNums[0];navigateLastPage = navigatepageNums[navigatepageNums.length - 1];if (pageNum > 1) {prePage = pageNum - 1;}if (pageNum < pages) {nextPage = pageNum + 1;}}}/*** 判定頁面邊界*/private void judgePageBoudary() {isFirstPage = pageNum == 1;isLastPage = pageNum == pages || pages == 0;;hasPreviousPage = pageNum > 1;hasNextPage = pageNum < pages;}public int getPageNum() {return pageNum;}public void setPageNum(int pageNum) {this.pageNum = pageNum;}public int getPageSize() {return pageSize;}public void setPageSize(int pageSize) {this.pageSize = pageSize;}public int getSize() {return size;}public void setSize(int size) {this.size = size;}public int getStartRow() {return startRow;}public void setStartRow(int startRow) {this.startRow = startRow;}public int getEndRow() {return endRow;}public void setEndRow(int endRow) {this.endRow = endRow;}public long getTotal() {return total;}public void setTotal(long total) {this.total = total;}public int getPages() {return pages;}public void setPages(int pages) {this.pages = pages;}public List<T> getList() {return list;}public void setList(List<T> list) {this.list = list;}@Deprecated// firstPage就是1, 此函數獲取的是導航條上的第一頁, 容易產生歧義public int getFirstPage() {return navigateFirstPage;}@Deprecatedpublic void setFirstPage(int firstPage) {this.navigateFirstPage = firstPage;}public int getPrePage() {return prePage;}public void setPrePage(int prePage) {this.prePage = prePage;}public int getNextPage() {return nextPage;}public void setNextPage(int nextPage) {this.nextPage = nextPage;}@Deprecated// 請用getPages()來獲取最后一頁, 此函數獲取的是導航條上的最后一頁, 容易產生歧義.public int getLastPage() {return navigateLastPage;}@Deprecatedpublic void setLastPage(int lastPage) {this.navigateLastPage = lastPage;}public boolean isIsFirstPage() {return isFirstPage;}public void setIsFirstPage(boolean isFirstPage) {this.isFirstPage = isFirstPage;}public boolean isIsLastPage() {return isLastPage;}public void setIsLastPage(boolean isLastPage) {this.isLastPage = isLastPage;}public boolean isHasPreviousPage() {return hasPreviousPage;}public void setHasPreviousPage(boolean hasPreviousPage) {this.hasPreviousPage = hasPreviousPage;}public boolean isHasNextPage() {return hasNextPage;}public void setHasNextPage(boolean hasNextPage) {this.hasNextPage = hasNextPage;}public int getNavigatePages() {return navigatePages;}public void setNavigatePages(int navigatePages) {this.navigatePages = navigatePages;}public int[] getNavigatepageNums() {return navigatepageNums;}public void setNavigatepageNums(int[] navigatepageNums) {this.navigatepageNums = navigatepageNums;}public int getNavigateFirstPage() {return navigateFirstPage;}public int getNavigateLastPage() {return navigateLastPage;}public void setNavigateFirstPage(int navigateFirstPage) {this.navigateFirstPage = navigateFirstPage;}public void setNavigateLastPage(int navigateLastPage) {this.navigateLastPage = navigateLastPage;}@Overridepublic String toString() {final StringBuffer sb = new StringBuffer("PageInfo{");sb.append("pageNum=").append(pageNum);sb.append(", pageSize=").append(pageSize);sb.append(", size=").append(size);sb.append(", startRow=").append(startRow);sb.append(", endRow=").append(endRow);sb.append(", total=").append(total);sb.append(", pages=").append(pages);sb.append(", list=").append(list);sb.append(", prePage=").append(prePage);sb.append(", nextPage=").append(nextPage);sb.append(", isFirstPage=").append(isFirstPage);sb.append(", isLastPage=").append(isLastPage);sb.append(", hasPreviousPage=").append(hasPreviousPage);sb.append(", hasNextPage=").append(hasNextPage);sb.append(", navigatePages=").append(navigatePages);sb.append(", navigateFirstPage=").append(navigateFirstPage);sb.append(", navigateLastPage=").append(navigateLastPage);sb.append(", navigatepageNums=");if (navigatepageNums == null) sb.append("null");else {sb.append('[');for (int i = 0; i < navigatepageNums.length; ++i)sb.append(i == 0 ? "" : ", ").append(navigatepageNums[i]);sb.append(']');}sb.append('}');return sb.toString();} }3.實例
public PageResult<Brand> queryBrandsByPage(String key, Integer page, Integer rows, String sortBy, boolean desc) {//根據name模糊查詢,或者首字母查詢Example example = new Example(Brand.class);Example.Criteria criteria = example.createCriteria();if (StringUtils.isEmpty(key)){//模糊查詢名字,或者按首字母查詢criteria.andLike("name", "%" + key + "%").orEqualTo("letter",key);}//添加分頁條件PageHelper.startPage(page,rows);//添加排序條件//首先判斷有沒有排序字段if (StringUtils.isNotBlank(sortBy)){example.setOrderByClause(sortBy+ " " + (desc ? "desc" : "asc"));}List<Brand> brands = this.brandMapper.selectByExample(example);//先包裝成pageInfo對象PageInfo<Brand> pageInfo = new PageInfo<>(brands);//包裝成分頁結果集返回//pageInfo//總記錄數//private long total;//結果集//private List<T> list;return new PageResult<>(pageInfo.getTotal(),pageInfo.getList());}pageInfo.getTotal() 總記錄數
在真正使用時, 會發現total的值并不等于數據庫中記錄總數, 并且該值永遠等于查詢頁的記錄數, 即getTotal和getSize()效果相同. 讀者若自行查看SQL日志, 可發現startPage()方法成功執行, 返回的List是符合查詢條件的。
pageInfo.getList()返回的是一個結果集
總結
以上是生活随笔為你收集整理的PageHelper的PageInfo使用方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何做一个基于JAVA失物招领网站系统毕
- 下一篇: MES