分页是最常见的了,只要是数据有点多,就可以使用分页技术。
网上例子很多,有的也很不错,但是到现在为止还没有找到一个即符合页面和代码分离
又封装的很好的通用的分页类。可能是自己没有找到吧。因此,自己在自己小组项目中
实现了一个分页的模式,贴上代码跟大家分享一下,只要按照它的几步实现就可以了。
主要思路:
1.
实现一个分页类,里面有每页显示几条数据,当前页数,最大页数,最大记录
数等属性,方法有设置并获得最大记录数,设置并获的最大页数,获取集合,是否是第一条,
是否是最后一条等。
2.
定义一个接口,其中有个方法,接口的功能是,实现分页的对象,必须实现这个接口,接口
有个好处:实现多态,让所实现的类自动调用他们自己的方法,以实现获取不同的集合。
3.
在对应的javaBean里面,定义一个方法,根据一个该javaBean对象,页数,每页记录数为参数,返回一个分页类对象。
具体看代码:
分页类:Pagination
Code:
package util;
import impl.SQLCommandBean;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import java.util.regex.Pattern;
public class Pagination {
private int pageSize = 9;
private int pageNumber = 1;
private int maxPages;
private int maxElements;
private String sql;
String tableName="";
String pro="";
String condition="";
IPagination ipagination=null;
private SQLCommandBean connDB=new SQLCommandBean();
public Pagination(String sql) {
this.sql = sql;
init();
}
public Pagination(String sql, int pageSize, int pageNumber,IPagination ipagination) {
this.sql = sql;
this.pageSize = pageSize;
this.pageNumber = pageNumber;
this.ipagination=ipagination;
init();
this.setPageNumber(pageNumber);
}
private void init() {
setMaxElements();
setMaxPages();
}
private void setMaxElements() {
int begin=sql.indexOf(" ");
int end=sql.indexOf(",");
pro=sql.substring(sql.indexOf(" "),sql.indexOf(","));
tableName=sql.substring(sql.indexOf("from")+4,sql.indexOf("where"));
condition=sql.substring(sql.indexOf(("where"))+5);
this.maxElements=connDB.getSum("select count(*) as total from "+tableName+" where "+condition);
}
private void setMaxPages() {
if (maxElements != 0 && (maxElements % pageSize == 0)) {
maxPages = maxElements / pageSize;
} else {
maxPages = maxElements / pageSize + 1;
}
}
private String sqlModify(int begin,int end){
StringBuffer target = new StringBuffer(200);
target.append("select top ");
target.append(pageSize);
target.append(" * from "+tableName+" where "+pro+" not in(select top ");
target.append(begin);
target.append(" "+pro+" from "+tableName+")");
target.append(" and "+condition);
return target.toString();
}
private int getEndElement() {
int endElement = pageNumber * pageSize;
if (endElement >= maxElements) {
return maxElements;
} else {
return endElement;
}
}