Java实现分页显示数据

(以下使用ssm+jsp实现显示所有电影为例子)

1.封装一个PageBean类

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

//已知数据    

private int pageNum;    //当前页,从请求那边传过来。    

private int pageSize;    //每页显示的数据条数。    

private int totalRecord;    //总的记录条数。查询数据库得到的数据        


//需要计算得来    

private int totalPage;    //总页数,通过totalRecord和pageSize计算可以得来    

//开始索引,也就是我们在数据库中要从第几行数据开始拿,有了startIndex和pageSize,   

 //就知道了limit语句的两个数据,就能获得每页需要显示的数据了    

private int startIndex;                        


//将每页要显示的数据放在list集合中    

private List list;       


 //分页显示的页数,比如在页面上显示1,2,3,4,5页,start就为1,end就为5,这个也是算过来的   

private int start;    

private int end;        


//通过pageNum,pageSize,totalRecord计算得来tatalPage和startIndex   

 //构造方法中将pageNum,pageSize,totalRecord获得    

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

       this.pageNum = pageNum;

       this.pageSize = pageSize;

       this.totalRecord = totalRecord;

        //totalPage 总页数        

        if(totalRecord%pageSize==0){

           //说明整除,正好每页显示pageSize条数据,没有多余一页要显示少于pageSize条数据的 

          this.totalPage = totalRecord / pageSize;

       }else{

          //不整除,就要在加一页,来显示多余的数据。

            this.totalPage = totalRecord / pageSize +1;

        }

       //开始索引

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

        //显示10页,这里自己可以设置,想显示几页就自己通过下面算法修改

        this.start = 1;

        this.end = 10;

        //显示页数的算法

        if(totalPage <=10){

            //总页数都小于10,那么end就为总页数的值了。

            this.end = this.totalPage; 

         }else{ 

           //总页数大于10,那么就要根据当前是第几页,来判断start和end为多少了,

            this.start = pageNum - 4;

            this.end = pageNum + 5;

            if(start < 1){ 

                 //前4页不符合这个规则,

                 this.start = 1;

                 this.end = 10; 

             }

            if(end > this.totalPage){

                //比如当前页是倒数第2页或者最后一页,也同样不符合上面这个规则

                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文件(数据库操作)

//获取所有电影

<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为当前页码

List alllist=movieDao.getAllMovies();//获取所有电影

int totalRecord=alllist.size();//取得电影总数

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);//当页电影信息

pb.setList(pageList);

return pb;

}

5.Controller

public String getAllMovie(HttpServletRequest request,

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

int pageSize=10;//设置一页显示电影数

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

request.setAttribute("pageBean", pb);

return "ShowAllMovie";

}

6.jsp页面

<--%-- 构建分页导航 --%-->

共有${requestScope.pageBean.totalRecord}部电影,共${requestScope.pageBean.totalPage }页

<br/>

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

<--%--如果当前页为第一页时,就没有上一页这个超链接显示 --%-->

<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>

<--%--如果当前页不是第一页也不是最后一页,则有上一页和下一页这个超链接显示 --%-->

<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>

<--%-- 如果当前页是最后一页,则只有上一页这个超链接显示,下一页没有 --%-->

<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>

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,390评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,821评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,632评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,170评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,033评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,098评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,511评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,204评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,479评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,572评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,341评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,893评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,171评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,486评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,676评论 2 335

推荐阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,712评论 0 33
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,497评论 18 399
  • 一. Java基础部分.................................................
    wy_sure阅读 3,774评论 0 11
  • 一、 1、请用Java写一个冒泡排序方法 【参考答案】 public static void Bubble(int...
    独云阅读 1,300评论 0 6
  • “三思而后行”这句古训告诉我们做事前要多思考,在快速变化的时代,主动慢下来思考后再做决策。在进行产品商业决策和确定...
    华思语阅读 315评论 1 5