java web 面向对象式的分页设计
来源:互联网 发布:c语言顺序表的就地逆置 编辑:程序博客网 时间:2024/05/29 14:05
概念:当某些信息的列表很多,记录条非常大时。为了页面的整洁与方便,需要对大数据量进行分页显示。而分页的方式有两种: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<perResult){ //总共的记录数,都不够一个页面显示的。
pages = null;
}else{
//一页显示不下有分页时,要判断下。若当前总的页数,不超过10个,则pages数组为所有页码。
//否则,则选择当前的页码减4,当然还有结尾要判断下
if(totalPage<10){
pages = new int[totalPage];
for(int i=0;i<pages.length;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.length;i++){
pages[i] = start+i;
}
}
}
以上各变量都封装进Page类中,而请求处理器可以把perResult、curPage、startIndex封装成PageInfo类中,控制器调用Service层,而Service调用dao层,dao层返回的是totalResults、results(List)封装的PageQuery对象。
示例代码如下:
package com.test.doamin;import java.util.List;/** * dao层查询出来要返回的记录 * @author 陈淑飞 * @time Sep 28, 2012 */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;}}
package com.test.doamin;/** * Web前台页面,由View层控制器封闭好,传递给service层 * @author 陈淑飞 * @time Sep 28, 2012 */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;}}
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<perResult){ //总共的记录数,都不够一个页面显示的。pages = null;}else{ //一页显示不下有分页时,要判断下。若当前总的页数,不超过10个,则pages数组为所有页码。否则,则选择当前的页码减4,当然还有结尾要判断下if(totalPage<10){pages = new int[totalPage];for(int i=0;i<pages.length;i++){pages[i] = i+1;}}else{pages = new int[10];int start = curPage - 4; // 4,5,6,7,8(选中的),9,10,11,12,13if(start<1){start = 1;}if(curPage+5>=totalPage){start = totalPage-9; //不用担心,totalPage比9小}for(int i=0;i<pages.length;i++){pages[i] = start+i;}}}return pages;}public void setPages(int[] pages) {this.pages = pages;}public String getUrl() {return url;}public void setUrl(String url) {this.url = url;}public int getStartIndex() {return startIndex;}public void setStartIndex(int startIndex) {this.startIndex = startIndex;}}
- java web 面向对象式的分页设计
- Java面向对象设计
- java面向对象设计的六大原则
- Java面向对象的设计原则
- Java面向对象的设计和分析
- Java:面向对象设计的三个特征
- java面向对象的设计原则
- Java对于面向对象编程的设计
- 面向对象的设计
- 面向对象的设计
- 面向对象的设计
- 面向对象的设计
- 面向对象的设计
- 面向对象的设计
- 面向对象的设计
- java面向对象设计原则
- Java面向对象设计原则
- java面向对象设计原则
- 自动构建工具Ant深入剖析(四) 使用CVS及自定义任务
- WPF TreeView如何展开到某个节点
- Windows核心编程学习笔记(2)--Unicode与ANSI字符
- 定向销售
- android标签背景颜色渐变
- java web 面向对象式的分页设计
- QX项目实战-1.需求分析
- 地方门户网站SEO 重点做长尾词
- c++名字查找原则
- 进程让他每隔5秒钟执行一次(非阻塞)
- android分割线渐变色和几种颜色值定义
- Oracle创建表空间。创建用户以及授权。
- 这世界太苍白
- 卓越亚马逊推荐机制的学习和探讨