⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 paginglist.java

📁 Webwork+Spring+Freemake框架
💻 JAVA
字号:
package neo.core.common;

import java.util.List;

import org.springframework.jdbc.core.JdbcTemplate;

public class PagingList {
	private int rowCount = 0; // 记录总数

	private int pageCount = 1; // 分页总数

	private int pageSize = 20; // 每页记录数

	private int pageNum = 1; // 当前页数

	private int startIndex = 1; // 起始记录数

	private int endIndex = 1; // 结束记录数

	private String srcSqlForCount;// 用于计算记录总量的SQL语句

	private String srcSql;// 源SQL语句

	private List list;// 记录列表

	public PagingList(String srcSql, Object[] params, int pageNum,
			int pageSize, JdbcTemplate jdbcTemplate) {
		this(getCountSql(srcSql), srcSql, params, pageNum, pageSize,
				jdbcTemplate);
	}

	public PagingList(String srcSqlForCount, String srcSql, Object[] params,
			int pageNum, int pageSize, JdbcTemplate jdbcTemplate) {
		this.srcSqlForCount = srcSqlForCount;
		this.srcSql = srcSql;
		if (pageNum > 0) {
			this.pageNum = pageNum;
		}
		if (pageSize > 0) {
			this.pageSize = pageSize;
		}
		execute(jdbcTemplate, params);
	}

	/**
	 * 根据给定的数据计算相关分页信息
	 * 
	 * @param jdbcTemplate
	 */
	private void execute(JdbcTemplate jdbcTemplate, Object[] params) {
		// 计算记录总数
		this.rowCount = jdbcTemplate.queryForInt(srcSqlForCount, params);

		// 计算分页总数
		if ((rowCount % pageSize) == 0) {
			pageCount = rowCount / pageSize;
		} else {
			pageCount = rowCount / pageSize + 1;
		}
		if (pageCount == 0) {
			pageCount = 1;
		}

		// 判断pageNum是否过界
		if (pageNum > pageCount && rowCount != 0) {
			pageNum = pageCount;
		}

		// 计算起止记录
		startIndex = (pageNum - 1) * pageSize + 1;
		endIndex = (pageNum) * pageSize;

		Object[] tmp = null;
		if (params != null) {
			int pLen = params.length;
			tmp = new Object[pLen + 2];
			System.arraycopy(params, 0, tmp, 0, pLen);
			tmp[pLen] = getEndIndexInt();
			tmp[pLen + 1] = getStartIndexInt();
		} else {
			tmp = new Object[] { getEndIndexInt(), getStartIndexInt() };
		}
		setList(jdbcTemplate.queryForList(getPagingSql(), tmp));

	}

	/**
	 * 获得对象列表
	 */
	public List getList() {
		return list;
	}

	/**
	 * 设置对象列表
	 */
	public void setList(List list) {
		this.list = list;
	}

	/**
	 * 获取加入分页功能的SQL语句
	 */
	public String getPagingSql() {
		return getPagingSql(srcSql);
	}

	public int getStartIndex() {
		return startIndex;
	}

	/**
	 * 获得起始记录数的Integer形式
	 */
	public Integer getStartIndexInt() {
		return new Integer(startIndex);
	}

	public int getEndIndex() {
		return endIndex;
	}

	/**
	 * 获得结束记录数的Integer形式
	 */
	public Integer getEndIndexInt() {
		return new Integer(endIndex);
	}

	public int getPageCount() {
		return pageCount;
	}

	public int getPageNum() {
		return pageNum;
	}

	public int getPageSize() {
		return pageSize;
	}

	public int getRowCount() {
		return rowCount;
	}

	/**
	 * 将源SQL语句增加分页功能
	 */
	public static String getPagingSql(String srcSql) {
		StringBuffer pagingSql = new StringBuffer();
		pagingSql
				.append("SELECT /*+FIRST_ROWS*/ * FROM ( SELECT TBL_.*, ROWNUM R_ FROM ( ");
		pagingSql.append(srcSql);
		// 根据是否有order by子句选择不同的rownum截断方式
		if (srcSql.toLowerCase().indexOf("order by") == -1) {
			pagingSql.append(" ) TBL_ WHERE ROWNUM <= ? ) WHERE R_ >= ?");
		} else {
			pagingSql.append(" ) TBL_ ) WHERE R_ <= ? AND R_ >= ?");
		}
		return pagingSql.toString();
	}

	/**
	 * 将源SQL语句增加计算记录总数功能
	 */
	public static String getCountSql(String srcSql) {
		return "SELECT COUNT(*) FROM ( " + srcSql + " )";
	}

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -