内容已经在jsp页面 显示出来了
现在是单纯的 把已经查询出来的98条数据 做个分页
这样的话你可以看看jquery easyui的客户端分页。
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的一个变量里,分页的时候从那里拿数据。但是太蠢了,为什么不分页提取数据呢?
你在servlet里面获得数据库的条数,按照你的设计每页显示多少条数据和第几页,这两个参数,选出你要得到的数据,再发给页面,然后页面显示。
jtable
可以使用 一些 成熟的分页第三方代码库。如果第一次拿出来全部的数据。可使用bootstarp-tables类似于这样的代码库来分页,但是这样只是把数据在前端进行分页。并不好,应该在取数据时就分页。
分页就是sql语句中的limit a, b 你把这两个参数传递到Dao层,分页查数据库就可以了,你要是有100万数据,难道一次全查出来么?页面展示的也就最多20条数据吧,所以分页是必须要做的。
分页在controller层实现,然后调用service中的方法查询,并对查询的结果处理,具体的查询,由service层调dao层来执行。