一个用于分页的page类
今天周一,趁工作輕松,自己就寫了一個基于MySQl數(shù)據(jù)庫的分頁查詢,做分頁,最主要的是以下幾點:
一:寫sql語句:比如查詢某張數(shù)據(jù)表的數(shù)據(jù),sql語句為:select?*?from?table?limit?0,10
焦點就是limit這個限制條件,它的功能是:從0開始查詢10條數(shù)據(jù),表示你要在你的顯示頁面上顯示10條數(shù)據(jù),就是說你數(shù)據(jù)庫表里面有15條,那只能顯示10條,剩余5條數(shù)據(jù)
只能在下一頁中顯示。
同時需要查詢數(shù)據(jù)庫表中的數(shù)據(jù)總數(shù):select?count(*)?from?table?,?用于獲取數(shù)據(jù)的總頁數(shù)。詳細的介紹在代碼中有解析。
二:要有一個類用來專門處理分頁功能:Pages.java;這個不多說,直接上代碼,在代碼中有詳細的注釋:
package com.utis.util;import java.util.List;public class Page<T> {private int pageSize =10; //每頁顯示條數(shù)private int totalCount; //總條數(shù)private int start; //開始條數(shù)private int pageNo;//當前頁private int totalPages; //總頁數(shù)private List<T> pageList;//數(shù)據(jù)public Page(int totalCount){this.totalCount = totalCount;}/*** ��?��?獲取��下一條*/public int getCurrentPageNo(){return start / pageSize + 1;}/** * �?�����是否有下一條* @return*/public boolean getHasNextPage(){return getCurrentPageNo() < totalPages;}/*** �?�����當前頁是否大于1* @return*/public boolean getHasPavPage(){return getCurrentPageNo() > 1;}/*** ��?��獲取中頁數(shù)��* @return*/public int getTotalPages() {totalPages = totalCount / pageSize;if(totalCount % pageSize != 0){totalPages++;}return totalPages;}/*** ��?�設置當前頁����?��的開始條數(shù)* @param pageNo ��?頁數(shù)��* @return*/public int getStart(int pageNo){if(pageNo < 1){pageNo = 1;}else if(getTotalPages()>0&&pageNo > getTotalPages()){pageNo = getTotalPages();}start = (pageNo-1) * pageSize;return start;}//get and setpublic int getPageSize() {return pageSize;}public void setPageSize(int pageSize) {this.pageSize = pageSize;}public int getTotalCount() {return totalCount;}public void setTotalCount(int totalCount) {this.totalCount = totalCount;}public void setStart(int start) {this.start = start;}public List<T> getPageList() {return pageList;}public void setPageList(List<T> pageList) {this.pageList = pageList;}public void setTotalPages(int totalPages) {this.totalPages = totalPages;}public int getPageNo() {return pageNo;}public void setPageNo(int pageNo) {this.pageNo = pageNo;}}
?
?三:這時候就要做dao,service層的邏輯了,不過也挺簡單的,概括來說,將調(diào)用dao查詢出來的數(shù)據(jù),在?service層將其存儲到Pages<T>類中的pageList集合里面,并且還要把pageNo當前 頁?setPageNo(pageNo)中,為嘛要這樣呢,一將數(shù)據(jù)交給page類來分頁處理,二在顯示頁面有首頁,上一頁,下一頁,尾頁吧,這就是原因啦,?要用來獲取參數(shù)pageNo用的,別的也 不多說,先上代碼看看:
/*** 查詢未借閱的圖書*/public Page<Book> findBook(int pageNo){Page<Book> pages = new Page<Book>(findBookCount());pages.setPageNo(pageNo);pages.setPageList(bookDao.findBook(pages.getStart(pageNo), pages.getPageSize()));return pages;}/*** 查詢圖書總數(shù)*/public Integer findBookCount(){return bookDao.findBookCount();}??四:顯示頁:該頁面只是簡單地寫了一下,其中bug還是挺多的,但具體怎么修改還需要結合項目來操作
<form action="<%=basePath%>book/findBook" method="post"><a href="<%=basePath%>book/findBook?pageNo=1">【首頁】</a> <a href="<%=basePath%>book/findBook?pageNo=${booklist.pageNo-1}">【上一頁】</a><c:forEach begin="1" var="i" end="${booklist.totalPages}"><a href="<%=basePath%>book/findBook?pageNo=${i }">${i }</a></c:forEach><a href="<%=basePath%>book/findBook?pageNo=${booklist.pageNo+1}">【下一頁】</a><a href="<%=basePath%>book/findBook?pageNo=${booklist.totalPages }">【尾頁】</a><input type="text" size="1" name="pageNo" value="${booklist.pageNo}"/><input type="submit" value="GO" size="1"/>當前第${booklist.pageNo}頁/共${booklist.totalPages}頁</form>?
以上是我自己做的一個練習,還是有很多不足之處,其實分頁方法有?很多種,我做的這種是物理分頁,還有一種分頁叫邏輯分頁,這種分頁方式依靠的是對結果集的算法來分頁,因此通常被稱為“邏輯分頁”,該分頁其實是將數(shù)據(jù)庫的壓力交給了應用端,其實這兩種分頁查詢效率差別不大,但是我推薦使用物理分頁,不能因為提高一些速度而將數(shù)據(jù)庫的壓力交給了應用端而使用邏輯分頁,因為物理分頁在其他的性能上足以彌補了少許的劣勢。
?
轉載于:https://www.cnblogs.com/wcyBlog/p/4039497.html
總結
以上是生活随笔為你收集整理的一个用于分页的page类的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 又是一卦测感情,这卦很是霸气
- 下一篇: 解決BufferedReader读取UT