(java) 现在我已经将数据全部查询出来并在页面显示了,在这个前提下 我怎么把已经查询出来的数据 分页

内容已经在jsp页面 显示出来了
现在是单纯的 把已经查询出来的98条数据 做个分页

hibernate自带了支持多数据库的分页,或者你也可以写一个Page类在后台获取数据的时候就分页。网上也有很多分页算法,例如:百度的分页,google的分页。然后前台就好做了,只是让分页的内容显示出来就可以。
以下是百度分页算法参考:

public class BaiduPage { /** * 数据库一共多少行 */ private int rowCount; /** * 数据库查询其实行 */ private int startRow; /** * 当前页面导航序号 */ private int num; /** * 一页查询多少行 */ private int pageSize=10; /** * 一共有多少导航 */ private int navCount; /** * 上一页 */ private int prev; /** * 下一页 */ private int next; /** * 首页 */ private int first=1; /** * 尾页 */ private int last; /** *显示导航的起始 */ private int begin ; /** * 显示导航的结束 */ private int end; public BaiduPage { super; } /** * @param rowCount * @param num * @param pageSize */ public BaiduPageint rowCount, int num, int pageSize { super; //查询到的行数 this.rowCount = rowCount; //每页显示数量 this.pageSize = pageSize; //导航页面数=(向上取整)(行数/每页显示数量) this.navCount=int Math.ceilthis.rowCount*1.0/this.pageSize; this.last=this.navCount; //小于最小值 显示为第一页 this.num = Math.maxthis.first, num; //大于最大值 显示为最后一页 this.num=Math.minthis.last, num; //当前页面显示的起始行 =当前页面-1*10且大于等于0 this.startRow=Math.max0,this.num-1*this.pageSize; this.prev=Math.maxthis.first, this.num-1; this.next=Math.minthis.last, this.num+1; //显示导航的起始 小于10从第一页显示,大于10只显示10页 this.begin=this.num-this.first<=10?this.first:this.num-10; //显示导航的结束 小于9显示到最后一页,大于9显示9页 this.end=this.last-this.num<9?this.last:this.num+9; } public int getRowCount { return rowCount; } public void setRowCountint rowCount { this.rowCount = rowCount; } public int getStartRow { return startRow; } public void setStartRowint startRow { this.startRow = startRow; } public int getNum { return num; } public void setNumint num { this.num = num; } public int getPageSize { return pageSize; } public void setPageSizeint pageSize { this.pageSize = pageSize; } public int getNavCount { return navCount; } public void setNavCountint navCount { this.navCount = navCount; } public int getPrev { return prev; } public void setPrevint prev { this.prev = prev; } public int getNext { return next; } public void setNextint next { this.next = next; } public int getFirst { return first; } public void setFirstint first { this.first = first; } public int getLast { return last; } public void setLastint last { this.last = last; } public int getBegin { return begin; } public void setBeginint begin { this.begin = begin; } public int getEnd { return end; } public void setEndint end { this.end = end; } }

以下是Google分页算法参考:

import java.util.List; /** * google 和baidu不同之处在于google只显示10页导航 * @author Administrator * */
public class GooglePage { /** * 数据库一共多少行 */ private int rowCount; /** * 数据库查询其实行 */ private int startRow; /** * 当前页面导航序号 */ private int num; /** * 一页查询多少行 */ private int pageSize=10; /** * 一共有多少导航 */ private int navCount; /** * 上一页 */ private int prev; /** * 下一页 */ private int next; /** * 首页 */ private int first=1; /** * 尾页 */ private int last; /** *显示导航的起始 */ private int begin ; /** * 显示导航的结束 */ private int end; /** * 控制导航显示数量 */ private int navNum; private List pageData; public GooglePage { super; } /** * @param rowCount * @param num * @param pageSize */ public GooglePageint rowCount, int num, int pageSize,int navNum { super; //查询到的行数 this.rowCount = rowCount; //每页显示数量 this.pageSize = pageSize; //导航页面数=(向上取整)(行数/每页显示数量) this.navCount=int Math.ceilthis.rowCount*1.0/this.pageSize; this.last=this.navCount; //小于最小值 显示为第一页 this.num = Math.maxthis.first, num; //大于最大值 显示为最后一页 this.num=Math.minthis.last, num; //当前页面显示的起始行 =当前页面-1*10且大于等于0 this.startRow=Math.max0,this.num-1*this.pageSize; this.prev=Math.maxthis.first, this.num-1; this.next=Math.minthis.last, this.num+1; //显示导航的起始 // this.begin=this.num-this.first<=10?this.first:this.num-10; //显示导航的结束 小于9显示到最后一页,大于9显示9页
// this.end=this.last-this.num<9?this.last:this.num+9; this.navNum=navNum; //google 如果显示10个,前5后4 this.begin=Math.maxthis.first, this.num-this.navNum/2; this.end=Math.minthis.last, this.begin+this.navNum-1; //如果begin到end不够10个,显示后10个 if this.end-this.begin<this.navNum-1 { this.begin=Math.maxthis.first, this.last-this.navNum+1; } } public int getRowCount { return rowCount; } public void setRowCountint rowCount { this.rowCount = rowCount; } public int getStartRow { return startRow; } public void setStartRowint startRow { this.startRow = startRow; } public int getNum { return num; } public void setNumint num { this.num = num; } public int getPageSize { return pageSize; } public void setPageSizeint pageSize { this.pageSize = pageSize; } public int getNavCount { return navCount; } public void setNavCountint navCount { this.navCount = navCount; } public int getPrev { return prev; } public void setPrevint prev { this.prev = prev; } public int getNext { return next; } public void setNextint next { this.next = next; } public int getFirst { return first; } public void setFirstint first { this.first = first; } public int getLast { return last; } public void setLastint last { this.last = last; } public int getBegin { return begin; } public void setBeginint begin { this.begin = begin; } public int getEnd { return end; } public void setEndint end { this.end = end; } public int getNavNum { return navNum; } public void setNavNumint navNum { this.navNum = navNum; } public List getPageData { return pageData; } public void setPageDataList pageData { this.pageData = pageData; } }

为啥要全部一次性加载出来。。。

就算你全部加载出来了,你可以把数据放在jsp的一个变量里,分页的时候从那里拿数据。但是太蠢了,为什么不分页提取数据呢?

可以使用 一些 成熟的分页第三方代码库。如果第一次拿出来全部的数据。可使用bootstarp-tables类似于这样的代码库来分页,但是这样只是把数据在前端进行分页。并不好,应该在取数据时就分页。

你在servlet里面获得数据库的条数,按照你的设计每页显示多少条数据和第几页,这两个参数,选出你要得到的数据,再发给页面,然后页面显示。

jtable

分页就是sql语句中的limit a, b 你把这两个参数传递到Dao层,分页查数据库就可以了,你要是有100万数据,难道一次全查出来么?页面展示的也就最多20条数据吧,所以分页是必须要做的。

分页在controller层实现,然后调用service中的方法查询,并对查询的结果处理,具体的查询,由service层调dao层来执行。

这样的话你可以看看jquery easyui的客户端分页。

发表评论

电子邮件地址不会被公开。 必填项已用*标注