ITPub博客

首页 > 数据库 > MySQL > java web 面向对象式的分页设计

java web 面向对象式的分页设计

MySQL 作者:mayflowerxnww 时间:2014-02-26 21:33:27 0 删除 编辑

概念:当某些信息的列表很多,记录条非常大时。为了页面的整洁与方便,需要对大数据量进行分页显示。而分页的方式有两种:1>数据分页 2>数据库分页。两者的区别是:数据分页将所有数据都一次性查出来,再根据查出来的内存集合进行分页显示,而数据库分页每次只查出来指定条数(每次显示条数)出来。个人建议采用方式二,若数据量太小时也没有必要分页呢。所以强烈推荐采用方式二。

方式二数据库分页,由于每次只从数据库中取出指定的条数,而从数据库取指定条数的数据需要用DQL语句,数据库不同采用的DQL语句也可能不同。这里以MySql与Oracle说明。

MySql分页实现的SQL语句:

Select id,name ... From tableA limit M,N

其中M代表记录开始索引位置 N代表取多少条记录(每页显示多少条记录)。

Oracle分面实现的SQL语句:

Select rowResult,id,name... From(select rownum rowResult,id,name ..from tableA) where rowResult K AND J  

其中K代表从数据库表中第几行记录开始取数据,而J代表取出的记录数截止到第几个记录行。

WEB页面的分页显示分析:

1>先获取需要分页显示的记录总数 totalResult

2>设置每页显示的记录条数 perResult

3>那么总页数就可以算出totalPage = totalResult%perResult==0?totalResult/perResult:(totalResult/perResult+1);

4>引入变量curPage代表当前页数,由页面jsp传入。

5>从数据库取数据开始的索引位置startIndex=(curPage-1>1?curPage-1:0)*perResult;

6>上一页页数perPage=curPage-1>1?curpage-1:1;

7>下一页页数nextPage=curPage+1>totalPage?totalPge:curPage+1;

8>首页页数可固定:fistPage=1;

9>末页数即是总页数lastPage=totalPage;

10>记录集List results,代表从数据库中startIndex开始索引位,取出perResult个记录集封闭成javabean对象后,再存放到此容器results中。

11>String类型的url变量,存放分页显示向服务器请求的url基地址。

如完整的首位请求地址为:url?curPage=1;

12>int[]类型的数组变量pages,代表选中某一页面后,从此页面数中计算出来的若个页面数存放在此容器中。比如当数据有超过100页时,而当前选择了第6页。那么希望把第6页前后共10个页数的链接显示出来以方便查找。Pages数据计算方式如下:

if(totalResult//总共的记录数,都不够一个页面显示的。

pages = null;

}else{ 

//一页显示不下有分页时,要判断下。若当前总的页数,不超过10个,则pages数组为所有页码。

//否则,则选择当前的页码减4,当然还有结尾要判断下

if(totalPage<10){

pages = new int[totalPage];

for(int i=0;i

pages[i] = i+1;

}

}else{

pages = new int[10];

int start = curPage - 4;   //  4,5,6,7,8(选中的),9,10,11,12,13

if(start<1){

start = 1;

}

if(curPage+5>=totalPage){

start = totalPage-9; //totalPage绝对大于9

}

for(int i=0;i

pages[i] = start+i;

}

}

}

以上各变量都封装进Page类中,而请求处理器可以把perResult、curPage、startIndex封装成PageInfo类中,控制器调用Service层,而Service调用dao层,dao层返回的是totalResults、results(List)封装的PageQuery对象。


示例代码如下:

 

  1. package com.test.doamin;  
  2.   
  3. import java.util.List;  
  4.   
  5.   
  6. public class PageQuery {  
  7.   
  8.     private int totalResults ; //dao层,查询出来的共有多少条记录数  
  9.       
  10.     private List list ;  //dao层,查询出来要返回的结果  
  11.   
  12.     public int getTotalResults() {  
  13.         return totalResults;  
  14.     }  
  15.   
  16.     public void setTotalResults(int totalResults) {  
  17.         this.totalResults = totalResults;  
  18.     }  
  19.   
  20.     public List getList() {  
  21.         return list;  
  22.     }  
  23.   
  24.     public void setList(List list) {  
  25.         this.list = list;  
  26.     }  
  27.       
  28. }  
package com.test.doamin;

import java.util.List;


public class PageQuery {

        private int totalResults ; //dao层,查询出来的共有多少条记录数
        
        private List list ;  //dao层,查询出来要返回的结果

        public int getTotalResults() {
                return totalResults;
        }

        public void setTotalResults(int totalResults) {
                this.totalResults = totalResults;
        }

        public List getList() {
                return list;
        }

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

  1. package com.test.doamin;  
  2.   
  3. public class PageInfo {  
  4.   
  5.     private int perResult = 10; //每页显示多少条记录,默认为10条。  
  6.     private int curPage;  //当前页数   页数可传入                    页面传入  
  7.     private int startIndex ;//要请求数据的下一个页面,数据开始索引数   可以通过前面两参数算出的。  
  8.     public int getPerResult() {  
  9.         return perResult;  
  10.     }  
  11.     public void setPerResult(int perResult) {  
  12.         this.perResult = perResult;  
  13.     }  
  14.     public int getCurPage() {  
  15.         return curPage;  
  16.     }  
  17.     public void setCurPage(int curPage) {  
  18.         this.curPage = curPage;  
  19.     }  
  20.     public int getStartIndex() { //算出索引  
  21.         startIndex = (curPage-1>1?curPage-1:0)*perResult;  
  22.         return startIndex;  
  23.     }  
  24.     public void setStartIndex(int startIndex) {  
  25.         this.startIndex = startIndex;  
  26.     }  
  27.       
  28.       
  29. }  
package com.test.doamin;

public class PageInfo {

        private int perResult = 10; //每页显示多少条记录,默认为10条。
        private int curPage;  //当前页数   页数可传入                                    页面传入
        private int startIndex ;//要请求数据的下一个页面,数据开始索引数   可以通过前面两参数算出的。
        public int getPerResult() {
                return perResult;
        }
        public void setPerResult(int perResult) {
                this.perResult = perResult;
        }
        public int getCurPage() {
                return curPage;
        }
        public void setCurPage(int curPage) {
                this.curPage = curPage;
        }
        public int getStartIndex() { //算出索引
                startIndex = (curPage-1>1?curPage-1:0)*perResult;
                return startIndex;
        }
        public void setStartIndex(int startIndex) {
                this.startIndex = startIndex;
        }
        
        
}

  1. package com.test.doamin;  
  2.   
  3. import java.util.List;  
  4.   
  5. public class Page {  
  6.   
  7.     private int perResult; //每页显示多少条记录,默认为10条。  
  8.     private int totalResult; //总共有多少记录数             dao层可传入  
  9.     private int totalPage; //总共有多少页                     根据前面两参数可算出  
  10.     private int curPage;  //当前页数   页数可传入                页面传入  
  11.     private int startIndex; //开始索引处,即要请求的页面数据,从数据库哪里索引取出。 //可算出来  
  12.     private int perPage;  //上一个页数 可以算出来             根据前面参数算出  
  13.     private int nextPage; //下一个页数                       根据前面参数算出  
  14.     private int fistPage; //首页数                         根据前面参数算出  
  15.     private int lastPage; //末页数                         根据前面参数算出  
  16.       
  17.     private List recodes; //记录集                         dao层传入  
  18.     private String url ;  //分页显示时,各页数点击时的url基地址  
  19.       
  20.     private int[] pages ; //页面选中某一页后,自动算出来的页数  
  21.   
  22.     public int getPerResult() {  
  23.         return perResult;  
  24.     }  
  25.   
  26.     public void setPerResult(int perResult) {  
  27.         this.perResult = perResult;  
  28.     }  
  29.   
  30.     public int getTotalResult() {  
  31.         return totalResult;  
  32.     }  
  33.   
  34.     public void setTotalResult(int totalResult) {  
  35.         this.totalResult = totalResult;  
  36.     }  
  37.   
  38.     public int getTotalPage() {  
  39.         totalPage = totalResult%perResult==0?totalResult/perResult:(totalResult/perResult+1);  
  40.         return totalPage;  
  41.     }  
  42.   
  43.     public void setTotalPage(int totalPage) {  
  44.         this.totalPage = totalPage;  
  45.     }  
  46.   
  47.     public int getCurPage() {  
  48.         return curPage;  
  49.     }  
  50.   
  51.     public void setCurPage(int curPage) {  
  52.         this.curPage = curPage;  
  53.     }  
  54.   
  55.     public int getPerPage() {  
  56.         perPage = curPage-1>1?curPage-1:1;  
  57.         return perPage;  
  58.     }  
  59.   
  60.     public void setPerPage(int perPage) {  
  61.         this.perPage = perPage;  
  62.     }  
  63.   
  64.     public int getNextPage() {  
  65.         nextPage = curPage+1>totalPage?totalPage:curPage+1;  
  66.         return nextPage;  
  67.     }  
  68.   
  69.     public void setNextPage(int nextPage) {  
  70.         this.nextPage = nextPage;  
  71.     }  
  72.   
  73.     public int getFistPage() {  
  74.         fistPage = 1;  
  75.         return fistPage;  
  76.     }  
  77.   
  78.     public void setFistPage(int fistPage) {  
  79.         this.fistPage = fistPage;  
  80.     }  
  81.   
  82.     public int getLastPage() {  
  83.         lastPage = totalPage;  
  84.         return lastPage;  
  85.     }  
  86.   
  87.     public void setLastPage(int lastPage) {  
  88.         this.lastPage = lastPage;  
  89.     }  
  90.   
  91.     public List getRecodes() {  
  92.         return recodes;  
  93.     }  
  94.   
  95.     public void setRecodes(List recodes) {  
  96.         this.recodes = recodes;  
  97.     }  
  98.   
  99.     public int[] getPages() {  
  100.         if(totalResult//总共的记录数,都不够一个页面显示的。  
  101.             pages = null;  
  102.         }else{ //一页显示不下有分页时,要判断下。若当前总的页数,不超过10个,则pages数组为所有页码。否则,则选择当前的页码减4,当然还有结尾要判断下  
  103.             if(totalPage<10){  
  104.                 pages = new int[totalPage];  
  105.                 for(int i=0;i
  106.                     pages[i] = i+1;  
  107.                 }  
  108.             }else{  
  109.                 pages = new int[10];  
  110.                 int start = curPage - 4;   //  4,5,6,7,8(选中的),9,10,11,12,13  
  111.                 if(start<1){  
  112.                     start = 1;  
  113.                 }  
  114.                 if(curPage+5>=totalPage){  
  115.                     start = totalPage-9; //不用担心,totalPage比9小  
  116.                 }  
  117.                 for(int i=0;i
  118.                     pages[i] = start+i;  
  119.                 }  
  120.                   
  121.             }  
  122.               
  123.         }  
  124.           
  125.         return pages;  
  126.     }  
  127.   
  128.     public void setPages(int[] pages) {  
  129.         this.pages = pages;  
  130.     }  
  131.   
  132.     public String getUrl() {  
  133.         return url;  
  134.     }  
  135.   
  136.     public void setUrl(String url) {  
  137.         this.url = url;  
  138.     }  
  139.   
  140.     public int getStartIndex() {  
  141.         return startIndex;  
  142.     }  
  143.   
  144.     public void setStartIndex(int startIndex) {  
  145.         this.startIndex = startIndex;  
  146.     }  
  147.       
  148.       
  149. }  
package com.test.doamin;

import java.util.List;

public class Page {

        private int perResult; //每页显示多少条记录,默认为10条。
        private int totalResult; //总共有多少记录数                             dao层可传入
        private int totalPage; //总共有多少页                                         根据前面两参数可算出
        private int curPage;  //当前页数   页数可传入                            页面传入
        private int startIndex; //开始索引处,即要请求的页面数据,从数据库哪里索引取出。 //可算出来
        private int perPage;  //上一个页数 可以算出来                             根据前面参数算出
        private int nextPage; //下一个页数                                           根据前面参数算出
        private int fistPage; //首页数                                                     根据前面参数算出
        private int lastPage; //末页数                                                     根据前面参数算出
        
        private List recodes; //记录集                                                     dao层传入
        private String url ;  //分页显示时,各页数点击时的url基地址
        
        private int[] pages ; //页面选中某一页后,自动算出来的页数

        public int getPerResult() {
                return perResult;
        }

        public void setPerResult(int perResult) {
                this.perResult = perResult;
        }

        public int getTotalResult() {
                return totalResult;
        }

        public void setTotalResult(int totalResult) {
                this.totalResult = totalResult;
        }

        public int getTotalPage() {
                totalPage = totalResult%perResult==0?totalResult/perResult:(totalResult/perResult+1);
                return totalPage;
        }

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

        public int getCurPage() {
                return curPage;
        }

        public void setCurPage(int curPage) {
                this.curPage = curPage;
        }

        public int getPerPage() {
                perPage = curPage-1>1?curPage-1:1;
                return perPage;
        }

        public void setPerPage(int perPage) {
                this.perPage = perPage;
        }

        public int getNextPage() {
                nextPage = curPage+1>totalPage?totalPage:curPage+1;
                return nextPage;
        }

        public void setNextPage(int nextPage) {
                this.nextPage = nextPage;
        }

        public int getFistPage() {
                fistPage = 1;
                return fistPage;
        }

        public void setFistPage(int fistPage) {
                this.fistPage = fistPage;
        }

        public int getLastPage() {
                lastPage = totalPage;
                return lastPage;
        }

        public void setLastPage(int lastPage) {
                this.lastPage = lastPage;
        }

        public List getRecodes() {
                return recodes;
        }

        public void setRecodes(List recodes) {
                this.recodes = recodes;
        }

        public int[] getPages() {
                if(totalResult<10){
                                pages = new int[totalPage];
                                for(int i=0;i<1){
                                        start = 1;
                                }
                                if(curPage+5>=totalPage){
                                        start = totalPage-9; //不用担心,totalPage比9小
                                }
                                for(int i=0;i

<!-- 正文结束 -->

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/23758792/viewspace-1114601/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 没有了~
下一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2010-04-20