扫码关注官方订阅号
内容已经在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 BaiduPage(int rowCount, int num, int pageSize) { super(); //查询到的行数 this.rowCount = rowCount; //每页显示数量 this.pageSize = pageSize; //导航页面数=(向上取整)(行数/每页显示数量) this.navCount=(int) Math.ceil(this.rowCount*1.0/this.pageSize); this.last=this.navCount; //小于最小值 显示为第一页 this.num = Math.max(this.first, num); //大于最大值 显示为最后一页 this.num=Math.min(this.last, num); //当前页面显示的起始行 =(当前页面-1)*10且大于等于0 this.startRow=Math.max(0,(this.num-1)*this.pageSize); this.prev=Math.max(this.first, (this.num-1)); this.next=Math.min(this.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 setRowCount(int rowCount) { this.rowCount = rowCount; } public int getStartRow() { return startRow; } public void setStartRow(int startRow) { this.startRow = startRow; } public int getNum() { return num; } public void setNum(int num) { this.num = num; } public int getPageSize() { return pageSize; } public void setPageSize(int pageSize) { this.pageSize = pageSize; } public int getNavCount() { return navCount; } public void setNavCount(int navCount) { this.navCount = navCount; } public int getPrev() { return prev; } public void setPrev(int prev) { this.prev = prev; } public int getNext() { return next; } public void setNext(int next) { this.next = next; } public int getFirst() { return first; } public void setFirst(int first) { this.first = first; } public int getLast() { return last; } public void setLast(int last) { this.last = last; } public int getBegin() { return begin; } public void setBegin(int begin) { this.begin = begin; } public int getEnd() { return end; } public void setEnd(int 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 GooglePage(int rowCount, int num, int pageSize,int navNum) { super(); //查询到的行数 this.rowCount = rowCount; //每页显示数量 this.pageSize = pageSize; //导航页面数=(向上取整)(行数/每页显示数量) this.navCount=(int) Math.ceil(this.rowCount*1.0/this.pageSize); this.last=this.navCount; //小于最小值 显示为第一页 this.num = Math.max(this.first, num); //大于最大值 显示为最后一页 this.num=Math.min(this.last, num); //当前页面显示的起始行 =(当前页面-1)*10且大于等于0 this.startRow=Math.max(0,(this.num-1)*this.pageSize); this.prev=Math.max(this.first, (this.num-1)); this.next=Math.min(this.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.max(this.first, this.num-this.navNum/2); this.end=Math.min(this.last, this.begin+this.navNum-1); //如果begin到end不够10个,显示后10个 if ((this.end-this.begin)<(this.navNum-1)) { this.begin=Math.max(this.first, this.last-this.navNum+1); } } public int getRowCount() { return rowCount; } public void setRowCount(int rowCount) { this.rowCount = rowCount; } public int getStartRow() { return startRow; } public void setStartRow(int startRow) { this.startRow = startRow; } public int getNum() { return num; } public void setNum(int num) { this.num = num; } public int getPageSize() { return pageSize; } public void setPageSize(int pageSize) { this.pageSize = pageSize; } public int getNavCount() { return navCount; } public void setNavCount(int navCount) { this.navCount = navCount; } public int getPrev() { return prev; } public void setPrev(int prev) { this.prev = prev; } public int getNext() { return next; } public void setNext(int next) { this.next = next; } public int getFirst() { return first; } public void setFirst(int first) { this.first = first; } public int getLast() { return last; } public void setLast(int last) { this.last = last; } public int getBegin() { return begin; } public void setBegin(int begin) { this.begin = begin; } public int getEnd() { return end; } public void setEnd(int end) { this.end = end; } public int getNavNum() { return navNum; } public void setNavNum(int navNum) { this.navNum = navNum; } public List getPageData() { return pageData; } public void setPageData(List pageData) { this.pageData = pageData; } }
为啥要全部一次性加载出来。。。
就算你全部加载出来了,你可以把数据放在jsp的一个变量里,分页的时候从那里拿数据。但是太蠢了,为什么不分页提取数据呢?
可以使用 一些 成熟的分页第三方代码库。如果第一次拿出来全部的数据。可使用bootstarp-tables类似于这样的代码库来分页,但是这样只是把数据在前端进行分页。并不好,应该在取数据时就分页。
你在servlet里面获得数据库的条数,按照你的设计每页显示多少条数据和第几页,这两个参数,选出你要得到的数据,再发给页面,然后页面显示。
jtable
分页就是sql语句中的limit a, b 你把这两个参数传递到Dao层,分页查数据库就可以了,你要是有100万数据,难道一次全查出来么?页面展示的也就最多20条数据吧,所以分页是必须要做的。
分页在controller层实现,然后调用service中的方法查询,并对查询的结果处理,具体的查询,由service层调dao层来执行。
这样的话你可以看看jquery easyui的客户端分页。
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
hibernate自带了支持多数据库的分页,或者你也可以写一个Page类在后台获取数据的时候就分页。网上也有很多分页算法,例如:百度的分页,google的分页。然后前台就好做了,只是让分页的内容显示出来就可以。
以下是百度分页算法参考:
以下是Google分页算法参考:
为啥要全部一次性加载出来。。。
就算你全部加载出来了,你可以把数据放在jsp的一个变量里,分页的时候从那里拿数据。但是太蠢了,为什么不分页提取数据呢?
可以使用 一些 成熟的分页第三方代码库。如果第一次拿出来全部的数据。可使用bootstarp-tables类似于这样的代码库来分页,但是这样只是把数据在前端进行分页。并不好,应该在取数据时就分页。
你在servlet里面获得数据库的条数,按照你的设计每页显示多少条数据和第几页,这两个参数,选出你要得到的数据,再发给页面,然后页面显示。
jtable
分页就是sql语句中的limit a, b 你把这两个参数传递到Dao层,分页查数据库就可以了,你要是有100万数据,难道一次全查出来么?页面展示的也就最多20条数据吧,所以分页是必须要做的。
分页在controller层实现,然后调用service中的方法查询,并对查询的结果处理,具体的查询,由service层调dao层来执行。
这样的话你可以看看jquery easyui的客户端分页。