84669 person learning
152542 person learning
20005 person learning
5487 person learning
7821 person learning
359900 person learning
3350 person learning
180660 person learning
48569 person learning
18603 person learning
40936 person learning
1549 person learning
1183 person learning
32909 person learning
内容已经在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的客户端分页。
hibernate自带了支持多数据库的分页,或者你也可以写一个Page类在后台获取数据的时候就分页。网上也有很多分页算法,例如:百度的分页,google的分页。然后前台就好做了,只是让分页的内容显示出来就可以。
以下是百度分页算法参考:
以下是Google分页算法参考:
为啥要全部一次性加载出来。。。
就算你全部加载出来了,你可以把数据放在jsp的一个变量里,分页的时候从那里拿数据。但是太蠢了,为什么不分页提取数据呢?
可以使用 一些 成熟的分页第三方代码库。如果第一次拿出来全部的数据。可使用bootstarp-tables类似于这样的代码库来分页,但是这样只是把数据在前端进行分页。并不好,应该在取数据时就分页。
你在servlet里面获得数据库的条数,按照你的设计每页显示多少条数据和第几页,这两个参数,选出你要得到的数据,再发给页面,然后页面显示。
jtable
分页就是sql语句中的limit a, b 你把这两个参数传递到Dao层,分页查数据库就可以了,你要是有100万数据,难道一次全查出来么?页面展示的也就最多20条数据吧,所以分页是必须要做的。
分页在controller层实现,然后调用service中的方法查询,并对查询的结果处理,具体的查询,由service层调dao层来执行。
这样的话你可以看看jquery easyui的客户端分页。