分页代码

来源:互联网 发布:聚合数据是什么 编辑:程序博客网 时间:2024/05/16 23:50
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);}}


原创粉丝点击