PagesFactory:
SplitPageInfo:
OraclePageInfo:
/**
* 分页工厂
* 根据数据库类型选择分页对象
*
* @author hjxia
* @version [版本号, 2010-7-27]
* @see [相关类/方法]
* @since [产品/模块版本]
*/
public class PagesFactory
{
public static final String DEFAULT_DB_TYPE = "oracle";
/**
* 私有构造器,不允许实例化
*/
private PagesFactory()
{
}
/**
* 获取分页对象
*
* @return SplitPageInfo
* @see [类、类#方法、类#成员]
*/
public static SplitPageInfo getSplitPageInfo()
{
SplitPageInfo page = null;
if ("oracle" == DEFAULT_DB_TYPE)
{
page = new OraclePageInfo();
}
return page;
}
}
SplitPageInfo:
/**
* 分页基本对象
* 如要实现相应数据库分页对象,继承此类
*
* @author hjxia
* @version [版本号, 2010-7-27]
* @see [相关类/方法]
* @since [产品/模块版本]
*/
public abstract class SplitPageInfo implements Serializable
{
/**
* 序列号
*/
private static final long serialVersionUID = 1L;
/** 开始记录数 */
protected int beginNum = 0;
/** 结束记录数 */
protected int endNum;
/** SQL语句 */
private String strSQL = "";
/** 分页查询的URL */
private String queryURL;
/** 排序字段名称 */
private String orderName;
/** 排序字段类型 */
private String orderType;
/** 记录总数 */
private int totals;
/** 每页显示记录数 */
private int perPageNum;
/** 总页数 */
private int allPage;
/** 当前页 */
private int currPage;
/**
* 构造
*/
public SplitPageInfo()
{
}
/**
* 获取分页SQL
* 抽象方法,子类实现
* @return String sql
* @see [类、类#方法、类#成员]
*/
public abstract String getSplitSql();
/**
* 计算开始和结束记录数
*
* @see [类、类#方法、类#成员]
*/
public void doPage()
{
// 计算总页数
this.setAllPage((this.totals + this.perPageNum - 1) / this.perPageNum);
if (currPage > allPage)
{
currPage = 1;
}
// 计算开始记录数
this.beginNum = (this.getCurrPage() - 1) * this.perPageNum;
// 计算结束记录数
this.endNum = (beginNum + perPageNum) < totals ? beginNum + perPageNum : totals;
}
/**
* 设置排序SQL
*
* @param sql 原始sql
* @see [类、类#方法、类#成员]
*/
public void setOrderSql(String sql)
{
if (null != this.orderName && !"".equals(this.orderName))
{
sql += " order by " + this.orderName;
sql += " " + this.orderType;
}
this.setStrSQL(sql);
}
/**
* 获取查询总记录数的SQL
*
* @return String 查询总记录数的SQL
* @see [类、类#方法、类#成员]
*/
public String getTotalSql()
{
StringBuffer stringBuffer = new StringBuffer();
stringBuffer.append("select count(*) as recordCount from (");
stringBuffer.append(this.strSQL);
stringBuffer.append(") tableName");
return stringBuffer.toString();
}
public int getBeginNum()
{
return beginNum;
}
public void setBeginNum(int beginNum)
{
this.beginNum = beginNum;
}
public int getEndNum()
{
return endNum;
}
public void setEndNum(int endNum)
{
this.endNum = endNum;
}
public String getStrSQL()
{
return strSQL;
}
public void setStrSQL(String strSQL)
{
this.strSQL = strSQL;
}
public String getQueryURL()
{
return queryURL;
}
public void setQueryURL(String queryURL)
{
this.queryURL = queryURL;
}
public String getOrderName()
{
return orderName;
}
public void setOrderName(String orderName)
{
this.orderName = orderName;
}
public String getOrderType()
{
return orderType;
}
public void setOrderType(String orderType)
{
this.orderType = orderType;
}
public int getTotals()
{
return totals;
}
public void setTotals(int totals)
{
this.totals = totals;
}
public int getPerPageNum()
{
return perPageNum;
}
public void setPerPageNum(int perPageNum)
{
this.perPageNum = perPageNum;
}
public int getAllPage()
{
return allPage;
}
public void setAllPage(int allPage)
{
if (allPage < 1)
{
allPage = 1;
}
this.allPage = allPage;
}
public int getCurrPage()
{
return currPage;
}
public void setCurrPage(int currPage)
{
if (currPage < 1)
{
currPage = 1;
}
this.currPage = currPage;
}
}
OraclePageInfo:
/**
* ORACLE分页对象,继承自SplitPageInfo
*
*
* @author hjxia
* @version [版本号, 2010-7-27]
* @see [相关类/方法]
* @since [产品/模块版本]
*/
public class OraclePageInfo extends SplitPageInfo
{
/**
* 获取分页SQL
* @return
*/
public String getSplitSql()
{
this.doPage();
StringBuffer sqlBuffer = new StringBuffer();
sqlBuffer.append("select * from (select t.*, rownum r_id from (");
sqlBuffer.append(this.getStrSQL());
sqlBuffer.append(") t where rownum <= ");
sqlBuffer.append(endNum);
sqlBuffer.append(") where r_id > ");
sqlBuffer.append(beginNum);
String str = sqlBuffer.toString();
//记录日志
return str;
}
}