Java實現(xiàn)分頁顯示數(shù)據(jù)

(以下使用ssm+jsp實現(xiàn)顯示所有電影為例子)

1.封裝一個PageBean類

package com.entity;import java.util.List;public class PageBean{

//已知數(shù)據(jù) ? ?

private int pageNum;? ? //當(dāng)前頁,從請求那邊傳過來睁搭。? ??

private int pageSize;? ? //每頁顯示的數(shù)據(jù)條數(shù)揽浙。? ??

private int totalRecord;? ? //總的記錄條數(shù)。查詢數(shù)據(jù)庫得到的數(shù)據(jù)? ? ? ??


//需要計算得來? ??

private int totalPage; ???//總頁數(shù),通過totalRecord和pageSize計算可以得來? ??

//開始索引滋捶,也就是我們在數(shù)據(jù)庫中要從第幾行數(shù)據(jù)開始拿,有了startIndex和pageSize堰酿,? ?

?//就知道了limit語句的兩個數(shù)據(jù)良狈,就能獲得每頁需要顯示的數(shù)據(jù)了? ??

private int startIndex;? ? ? ? ? ? ? ? ? ? ? ??


//將每頁要顯示的數(shù)據(jù)放在list集合中? ??

private List list;? ? ? ?


?//分頁顯示的頁數(shù),比如在頁面上顯示1,2黍特,3蛙讥,4,5頁灭衷,start就為1次慢,end就為5,這個也是算過來的 ??

private int start;? ??

private int end;? ? ? ??


//通過pageNum翔曲,pageSize经备,totalRecord計算得來tatalPage和startIndex? ?

?//構(gòu)造方法中將pageNum,pageSize部默,totalRecord獲得? ??

public PageBean(int pageNum,int pageSize,int totalRecord) {

? ? ? ?this.pageNum = pageNum;

? ? ? ?this.pageSize = pageSize;

? ? ? ?this.totalRecord = totalRecord;

? ? ? ? //totalPage 總頁數(shù) ? ? ? ?

? ? ? ? if(totalRecord%pageSize==0){

? ? ? ? ? ?//說明整除侵蒙,正好每頁顯示pageSize條數(shù)據(jù)瘤泪,沒有多余一頁要顯示少于pageSize條數(shù)據(jù)的?

? ? ? ? ? this.totalPage = totalRecord / pageSize;

?? ? ? }else{

? ? ? ? ? //不整除趟脂,就要在加一頁,來顯示多余的數(shù)據(jù)凳谦。

? ? ? ? ? ? this.totalPage = totalRecord / pageSize +1;

? ? ? ? }

? ? ? ?//開始索引

? ? ? ? this.startIndex = (pageNum-1)*pageSize ;

? ? ? ? //顯示10頁,這里自己可以設(shè)置犁功,想顯示幾頁就自己通過下面算法修改

? ? ? ? this.start = 1;

? ? ? ? this.end = 10;

? ? ? ? //顯示頁數(shù)的算法

? ? ? ? if(totalPage <=10){

? ? ? ? ? ? //總頁數(shù)都小于10氓轰,那么end就為總頁數(shù)的值了。

? ? ? ? ? ? this.end = this.totalPage;?

? ? ? ? ?}else{?

?? ? ? ? ? //總頁數(shù)大于10浸卦,那么就要根據(jù)當(dāng)前是第幾頁署鸡,來判斷start和end為多少了,

? ? ? ? ? ? this.start = pageNum - 4;

? ? ? ? ? ? this.end = pageNum + 5;

? ? ? ? ? ? if(start < 1){?

? ? ? ? ? ? ? ? ?//前4頁不符合這個規(guī)則限嫌,

? ? ? ? ? ? ? ? ?this.start = 1;

? ? ? ? ? ? ? ? ?this.end = 10;?

? ? ? ? ? ? ?}

? ? ? ? ? ? if(end > this.totalPage){

? ? ? ? ? ? ? ? //比如當(dāng)前頁是倒數(shù)第2頁或者最后一頁靴庆,也同樣不符合上面這個規(guī)則

? ? ? ? ? ? ? ? this.end = totalPage;?

?? ? ? ? ? ? ? this.start = end - 10;?

?? ? ? ? ? }

? ? ? ? }

? ? }

//getting,setting

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 getTotalRecord() {return totalRecord;}

public void setTotalRecord(int totalRecord) {this.totalRecord = totalRecord;}

public int getTotalPage() {return totalPage;}

public void setTotalPage(int totalPage) {this.totalPage = totalPage;}

public int getStartIndex() {return startIndex;}

public void setStartIndex(int startIndex) {this.startIndex = startIndex;}

public ListgetList() {return list;}

public void setList(Listlist) {this.list = list;}

public int getStart() {return start;}

public void setStart(int start) {this.start = start;}

public int getEnd() {return end;}

public void setEnd(int end) {this.end = end;}

}

2.mybatis.xml文件(數(shù)據(jù)庫操作)

//獲取所有電影

<select id="getAllMovie" resultType="com.entity.Movie">

? ? select * from movie

</select>


//獲取分頁電影

<select id="getPageMovie" parameterType="com.entity.SelectCondition" resultType="com.entity.Movie">

? ? select * from movie limit #{startIndex},#{pageSize}

</select>

3.DAO層

//獲取所有電影

public ListgetAllMovies() throws IOException{

List list=sqlSession.selectList("getAllMovie");

return list;

}

//? 獲取分頁電影

//SelectCondition為一個類,用于封裝多個查詢條件怒医,這里包含startIndex炉抒、pageSize兩個條件

public ListgetPageMovie(SelectCondition selectCondition) throws IOException{

List list= sqlSession.selectList("getPageMovie",selectCondition);

return list;

}

4.servier層

public PageBean getPageMovie(int pageNum,int pageSize) throws IOException{

//pageNum為當(dāng)前頁碼

List alllist=movieDao.getAllMovies();//獲取所有電影

int totalRecord=alllist.size();//取得電影總數(shù)

PageBean pb = new PageBean(pageNum, pageSize, totalRecord);

int startIndex=pb.getStartIndex();

SelectCondition selectCondition=new SelectCondition();

selectCondition.setStartIndex(startIndex);

selectCondition.setPageSize(pageSize);

List pageList=movieDao.getPageMovie(selectCondition);//當(dāng)頁電影信息

pb.setList(pageList);

return pb;

}

5.Controller

public String getAllMovie(HttpServletRequest request,

@RequestParam(value="pageNum",defaultValue="1") int pageNum) throws IOException{

int pageSize=10;//設(shè)置一頁顯示電影數(shù)

PageBean pb=movieService.getPageMovie(pageNum, pageSize);

request.setAttribute("pageBean", pb);

return "ShowAllMovie";

}

6.jsp頁面

<--%-- 構(gòu)建分頁導(dǎo)航 --%-->

共有${requestScope.pageBean.totalRecord}部電影,共${requestScope.pageBean.totalPage }頁

<br/>

<a href="${pageContext.request.contextPath}/movie/getallmovie.htm?pageNum=1">首頁</a>

<--%--如果當(dāng)前頁為第一頁時稚叹,就沒有上一頁這個超鏈接顯示 --%-->

<c:if test="${requestScope.pageBean.pageNum ==1}">

? ? <c:forEach begin="${requestScope.pageBean.start}" end="${requestScope.pageBean.end}" step="1" var="i">

? ? ? ? <c:if test="${requestScope.pageBean.pageNum == i}">${i}</c:if>

? ? ? ? <c:if test="${requestScope.pageBean.pageNum != i}">

? ? ? ? ? ? <a href="${pageContext.request.contextPath}/movie/getallmovie.htm?pageNum=${i}">${i}</a>

? ? ? ? </c:if>

</c:forEach>

? ? <a href="${pageContext.request.contextPath}/movie/getallmovie.htm?pageNum=${requestScope.pageBean.pageNum+1}">下一頁</a>

</c:if>

<--%--如果當(dāng)前頁不是第一頁也不是最后一頁焰薄,則有上一頁和下一頁這個超鏈接顯示 --%-->

<c:if test="${requestScope.pageBean.pageNum > 1 && requestScope.pageBean.pageNum <requestScope.pageBean.totalPage}">

? ? <a href="${pageContext.request.contextPath}/movie/getallmovie.htm?pageNum=${requestScope.pageBean.pageNum-1}">上一頁</a>

? ? <c:forEach begin="${requestScope.pageBean.start}" end="${requestScope.pageBean.end}" step="1" var="i">

? ? ? ? <c:if test="${requestScope.pageBean.pageNum == i}">${i}</c:if>

? ? ? ? <c:if test="${requestScope.pageBean.pageNum != i}">

? ? ? ? ? ? <a href="${pageContext.request.contextPath}/movie/getallmovie.htm?pageNum=${i}">${i}</a>

? ? ? ? </c:if>

? ? </c:forEach>

? ? <a href="${pageContext.request.contextPath}/movie/getallmovie.htm?pageNum=${requestScope.pageBean.pageNum+1}">下一頁</a>

</c:if>

<--%-- 如果當(dāng)前頁是最后一頁,則只有上一頁這個超鏈接顯示扒袖,下一頁沒有 --%-->

<c:if test="${requestScope.pageBean.pageNum == requestScope.pageBean.totalPage}">

? ? <a href="${pageContext.request.contextPath}/movie/getallmovie.htm?pageNum=${requestScope.pageBean.pageNum-1}">上一頁</a>

? ? <c:forEach begin="${requestScope.pageBean.start}" end="${requestScope.pageBean.end}" step="1" var="i">

? ? ? ? <c:if test="${requestScope.pageBean.pageNum == i}">${i}</c:if>

? ? ? ? <c:if test="${requestScope.pageBean.pageNum != i}">

? ? ? ? ? ? <a href="${pageContext.request.contextPath}/movie/getallmovie.htm?pageNum=${i}">${i}</a>

? ? ? ? </c:if>

? ? </c:forEach>

</c:if>

<--%--尾頁 --%-->

<a href="${pageContext.request.contextPath}/movie/getallmovie.htm?pageNum=${requestScope.pageBean.totalPage}">尾頁</a>

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末塞茅,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子季率,更是在濱河造成了極大的恐慌凡桥,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,576評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蚀同,死亡現(xiàn)場離奇詭異缅刽,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)蠢络,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評論 3 399
  • 文/潘曉璐 我一進(jìn)店門衰猛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人刹孔,你說我怎么就攤上這事啡省。” “怎么了髓霞?”我有些...
    開封第一講書人閱讀 168,017評論 0 360
  • 文/不壞的土叔 我叫張陵卦睹,是天一觀的道長。 經(jīng)常有香客問我方库,道長结序,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,626評論 1 296
  • 正文 為了忘掉前任纵潦,我火速辦了婚禮徐鹤,結(jié)果婚禮上垃环,老公的妹妹穿的比我還像新娘。我一直安慰自己返敬,他們只是感情好遂庄,可當(dāng)我...
    茶點故事閱讀 68,625評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著劲赠,像睡著了一般涛目。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上凛澎,一...
    開封第一講書人閱讀 52,255評論 1 308
  • 那天霹肝,我揣著相機(jī)與錄音,去河邊找鬼预厌。 笑死阿迈,一個胖子當(dāng)著我的面吹牛元媚,可吹牛的內(nèi)容都是我干的轧叽。 我是一名探鬼主播,決...
    沈念sama閱讀 40,825評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼刊棕,長吁一口氣:“原來是場噩夢啊……” “哼炭晒!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起甥角,我...
    開封第一講書人閱讀 39,729評論 0 276
  • 序言:老撾萬榮一對情侶失蹤网严,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后嗤无,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體震束,經(jīng)...
    沈念sama閱讀 46,271評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,363評論 3 340
  • 正文 我和宋清朗相戀三年当犯,在試婚紗的時候發(fā)現(xiàn)自己被綠了垢村。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,498評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡嚎卫,死狀恐怖嘉栓,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情拓诸,我是刑警寧澤侵佃,帶...
    沈念sama閱讀 36,183評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站奠支,受9級特大地震影響馋辈,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜倍谜,卻給世界環(huán)境...
    茶點故事閱讀 41,867評論 3 333
  • 文/蒙蒙 一首有、第九天 我趴在偏房一處隱蔽的房頂上張望燕垃。 院中可真熱鬧,春花似錦井联、人聲如沸卜壕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,338評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽轴捎。三九已至,卻和暖如春蚕脏,著一層夾襖步出監(jiān)牢的瞬間侦副,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,458評論 1 272
  • 我被黑心中介騙來泰國打工驼鞭, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留秦驯,地道東北人。 一個月前我還...
    沈念sama閱讀 48,906評論 3 376
  • 正文 我出身青樓挣棕,卻偏偏與公主長得像译隘,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子洛心,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,507評論 2 359

推薦閱讀更多精彩內(nèi)容

  • 背景 一年多以前我在知乎上答了有關(guān)LeetCode的問題, 分享了一些自己做題目的經(jīng)驗固耘。 張土汪:刷leetcod...
    土汪閱讀 12,748評論 0 33
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法词身,內(nèi)部類的語法厅目,繼承相關(guān)的語法,異常的語法法严,線程的語...
    子非魚_t_閱讀 31,662評論 18 399
  • 一. Java基礎(chǔ)部分.................................................
    wy_sure閱讀 3,814評論 0 11
  • 一损敷、 1、請用Java寫一個冒泡排序方法 【參考答案】 public static void Bubble(int...
    獨云閱讀 1,386評論 0 6
  • “三思而后行”這句古訓(xùn)告訴我們做事前要多思考,在快速變化的時代墓塌,主動慢下來思考后再做決策瘟忱。在進(jìn)行產(chǎn)品商業(yè)決策和確定...
    華思語閱讀 330評論 1 5