分页代码

25 篇文章 0 订阅
package cn.itcast.oa.domain;

import java.io.Serializable;
import java.util.List;

/**
 * 分页功能中的一页的信息(封装对象)
 * 
 * @author 风清杨
 * @version V1.0
 */
@SuppressWarnings({ "serial", "rawtypes" })
public class PageBean implements Serializable {

	// 指定的或是页面参数
	/** 当前页 */
	private int currentPage;// 当前页
	/** 每页显示多少条数据 */
	private int pageSize;// 每页显示多少条数据

	// 查询数据库
	/** 总记录数 */
	private int recordCount;// 总记录数
	/** 本页的数据列表 */
	private List recordList;// 本页的数据列表

	// 计算
	/** 总页数 */
	private int pageCount;// 总页数
	/** 页码列表的开始索引(包含) */
	private int beginPageIndex;// 页码列表的开始索引(包含)
	/** 页码列表的结束索引(包含) */
	private int endPageIndex;// 页码列表的结束索引(包含)

	/**
	 * 只接受前4个必要的属性,会自动计算出其它3个属性的值
	 * 
	 * @param currentPage
	 *            当前页
	 * @param pageSize
	 *            每页显示多少条数据
	 * @param recordCount
	 *            总记录数
	 * @param recordList
	 *            本页的数据列表
	 */
	public PageBean(int currentPage, int pageSize, int recordCount, List recordList) {
		this.currentPage = currentPage;
		this.pageSize = pageSize;
		this.recordCount = recordCount;
		this.recordList = recordList;

		// 计算总页码
		this.pageCount = (recordCount + pageSize - 1) / pageSize;

		// 计算 beginPageIndex 和 endPageIndex 结束索引
		// >> 总页数不多于10页,则全部显示
		if (pageCount <= 10) {
			beginPageIndex = 1;
			endPageIndex = pageCount;
		}
		// >> 总页数多于10页,则显示当前页附近的共10个页
		else {
			// >> 当前页附近的共10个页码(前4个 + 当前页 + 后5个)
			beginPageIndex = currentPage - 4;
			endPageIndex = currentPage + 5;
			// >> 当前面的页码不足4个时,则显示前10个页码
			if (beginPageIndex < 1) {
				beginPageIndex = 1;
				endPageIndex = 10;
			}
			// >> 当后面的页码不足5个时,则显示后10个页码
			if (endPageIndex > pageCount) {
				endPageIndex = pageCount;
				beginPageIndex = pageCount - 10 + 1;
			}
		}
	}

	public List getRecordList() {
		return recordList;
	}

	public void setRecordList(List recordList) {
		this.recordList = recordList;
	}

	public int getCurrentPage() {
		return currentPage;
	}

	public void setCurrentPage(int currentPage) {
		this.currentPage = currentPage;
	}

	public int getPageCount() {
		return pageCount;
	}

	public void setPageCount(int pageCount) {
		this.pageCount = pageCount;
	}

	public int getPageSize() {
		return pageSize;
	}

	public void setPageSize(int pageSize) {
		this.pageSize = pageSize;
	}

	public int getRecordCount() {
		return recordCount;
	}

	public void setRecordCount(int recordCount) {
		this.recordCount = recordCount;
	}

	public int getBeginPageIndex() {
		return beginPageIndex;
	}

	public void setBeginPageIndex(int beginPageIndex) {
		this.beginPageIndex = beginPageIndex;
	}

	public int getEndPageIndex() {
		return endPageIndex;
	}

	public void setEndPageIndex(int endPageIndex) {
		this.endPageIndex = endPageIndex;
	}

}


	// 公共的查询分页信息的方法(最终版)
	public PageBean getPageBean(int pageNum, int pageSize, QueryHelper queryHelper) {
		System.out.println("------> DaoSupporImpl.getPageBean(int pageNum, int pageSize, QueryHelper queryHelper)");
		List<Object> parameters = queryHelper.getParameters();

		// 查询本页的数据列表
		Query listQuery = getSession().createQuery(queryHelper.getListQueryHql());// 创建查询对象
		if (parameters != null) {// 设置参数
			for (int i = 0; i < parameters.size(); i++) {
				listQuery.setParameter(i, parameters.get(i));
			}
		}
		listQuery.setFirstResult((pageNum - 1) * pageSize);//
		listQuery.setMaxResults(pageSize);//
		List list = listQuery.list();// 执行查询

		// 查询总记录数量
		Query countQuery = getSession().createQuery(queryHelper.getCountQueryHql());
		if (parameters != null) {// 设置参数
			for (int i = 0; i < parameters.size(); i++) {
				countQuery.setParameter(i, parameters.get(i));
			}
		}
		Long count = (Long) countQuery.uniqueResult();// 执行查询

		return new PageBean(pageNum, pageSize, count.intValue(), list);
	}

package cn.itcast.oa.util;

import java.util.ArrayList;
import java.util.List;

import cn.itcast.oa.base.DaoSupport;
import cn.itcast.oa.domain.PageBean;

import com.opensymphony.xwork2.ActionContext;

/**
 * 用于辅助拼接HQL语句_工具
 * 
 * @author 风清杨
 * @version V1.0
 */
@SuppressWarnings({ "rawtypes" })
public class QueryHelper {
	private String fromClause;// From子句
	private String whereClause = "";// Where子句
	private String orderByClause = "";// OrderBy子句

	private List<Object> parameters = new ArrayList<Object>();// 参数列表

	/**
	 * 生成From子句
	 * 
	 * @param clazz
	 * @param alias
	 *            别名
	 */
	public QueryHelper(Class clazz, String alias) {
		fromClause = " from " + clazz.getSimpleName() + " " + alias;// from User u
	}

	/**
	 * 拼接Where子句
	 * 
	 * @param condition
	 * @param params
	 */
	public QueryHelper addCondition(String condition, Object... params) {
		// 拼接
		if (whereClause.length() == 0) {
			whereClause = " where " + condition;// from User u where ?
		} else {
			whereClause += " and " + condition;// from User u where ?,and ?
		}

		// 参数
		if (params != null) {
			for (Object obj : params) {
				parameters.add(obj);
			}
		}
		return this;
	}

	/**
	 * 如果第一个参数为true,则拼接Where子句
	 * 
	 * @param append
	 * @param condition
	 * @param params
	 */
	public QueryHelper addCondition(boolean append, String condition, Object... params) {
		if (append) {
			addCondition(condition, params);
		}
		return this;
	}

	/**
	 * 拼接OrderBy子句
	 * 
	 * @param propertyName
	 *            参于排序的属性名
	 * @param asc
	 *            true表示升序(1,2,3),false表示降序(3,2,1)
	 */
	public QueryHelper addOrderProperty(String propertyName, boolean asc) {
		if (orderByClause.length() == 0) {
			orderByClause = " Order by " + propertyName + (asc ? " asc " : " desc ");// from User u where ? order by ? asc/desc
		} else {
			orderByClause += " , " + propertyName + (asc ? " asc " : " desc ");// from User u where ? order by ? asc/desc,? asc/desc
		}
		return this;
	}

	/**
	 * 如果第一个参数为true,则拼接OrderBy子句
	 * 
	 * @param append
	 * @param propertyName
	 * @param asc
	 */
	public QueryHelper addOrderProperty(boolean append, String propertyName, boolean asc) {
		if (append) {
			addOrderProperty(propertyName, asc);
		}
		return this;
	}

	/**
	 * 获取生成用于查询数据列表的HQL语句
	 * 
	 * @return
	 */
	public String getListQueryHql() {
		return fromClause + whereClause + orderByClause;
	}

	/**
	 * 获取生成用于查询总记录数的HQL语句
	 * 
	 * @return
	 */
	public String getCountQueryHql() {
		return " select count(*) " + fromClause + whereClause;
	}

	/**
	 * 获取HQL中的参数值列表
	 * 
	 * @return
	 */
	public List<Object> getParameters() {
		return parameters;
	}

	/**
	 * 查询分页信息,并放到值栈栈顶
	 * @param service
	 * @param pageNum
	 * @param pageSize
	 */
	public void preparePageBean(DaoSupport<?> service,int pageNum, int pageSize) {
		PageBean pageBean = service.getPageBean(pageNum, pageSize, this);
		ActionContext.getContext().getValueStack().push(pageBean);
	}

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值