基于hibernate的分页程序的实现(后台)

分页类:

package com.wondersgroup.workflow.page.util;

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

@SuppressWarnings("serial")
public class Page implements Serializable{
	private int totalRows; 		
	private int pageSize=15;
	private int currentPage; 
	private int totalPages; 
	private int startRow; 
	public boolean hasNext=true;
	public boolean hasPrevious=false;
	
	public List<String[]> result = new ArrayList<String[]>();
	
	public Page(){
		super();
	}
	
	public Page(int _totalRows) {
		totalRows = _totalRows;
		totalPages = totalRows / pageSize;
		int mod = totalRows % pageSize;
		if (mod > 0) {
			totalPages++;
		}
		if(pageSize >= totalRows){
			hasNext=false;
			hasPrevious=false;
		}
		currentPage = 1;
		startRow = 0;
	}
	public Page(int _totalRows,int pageSize) {
		totalRows = _totalRows;
		this.pageSize = pageSize;
		totalPages = totalRows / pageSize;
		int mod = totalRows % pageSize;
		if (mod > 0) {
			totalPages++;
		}
		if(pageSize >= totalRows){
			hasNext=false;
			hasPrevious=false;
		}
		currentPage = 1;
		startRow = 0;
	}
	public int getStartRow() {
		return startRow;
	}

	public int getTotalPages() {
		return totalPages;
	}

	public int getCurrentPage() {
		return currentPage;
	}

	public int getPageSize() {
		return pageSize;
	}

	public void setTotalRows(int totalRows) {
		this.totalRows = totalRows;
	}

	public void setStartRow(int startRow) {
		this.startRow = startRow;
	}

	public void setTotalPages(int totalPages) {
		this.totalPages = totalPages;
	}

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

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

	public int getTotalRows() {
		return totalRows;
	}

	public void first() {
		
		currentPage = 1;
		startRow = 0;
		this.hasNext=true;
		this.hasPrevious=false;
		if(pageSize >= totalRows){
			hasNext=false;
			hasPrevious=false;
		}
	}

	public void previous() {
		if(currentPage>1){
			this.hasNext=true;
			this.hasPrevious=false;
			currentPage--;
		}else{
			this.hasNext=true;
			this.hasPrevious=true;
		}
		startRow = (currentPage - 1) * pageSize;
		if(startRow<0) startRow = 0;
	}

	public void next() {
		if(currentPage==(totalPages-1)){
			this.hasNext=false;
			this.hasPrevious=true;
		}else{
			this.hasNext=true;
			this.hasPrevious =true;
		}
		if (currentPage < totalPages) {
			currentPage++;
		}
		
		startRow = (currentPage -1) * pageSize;
	}

	public void last() {
		currentPage = totalPages;
		this.hasNext=false;
		this.hasPrevious=true;
		startRow = (currentPage - 1) * pageSize;
		if(startRow<0) startRow = 0;
		if(pageSize >= totalRows){
			hasNext=false;
			hasPrevious=false;
		}
	}

	public void refresh(int _currentPage) {
		currentPage = _currentPage;
		if(currentPage==1){
			this.hasNext=true;
			this.hasPrevious=false;
		}else if(currentPage==totalPages){
			this.hasNext=false;
			this.hasPrevious=true;
		}else{
			this.hasNext=this.hasPrevious=true;
		}
		startRow = (currentPage - 1) * pageSize;
		if(startRow<0) startRow = 0;
		if (currentPage > totalPages) {
			last();
		}
	}

	public boolean isHasNext() {
		return hasNext;
	}

	public void setHasNext(boolean hasNext) {
		this.hasNext = hasNext;
	}

	public boolean isHasPrevious() {
		return hasPrevious;
	}

	public void setHasPrevious(boolean hasPrevious) {
		this.hasPrevious = hasPrevious;
	}
}

为action提供 page构造方法:

package com.wondersgroup.workflow.page.util;

import javax.servlet.http.HttpServletRequest;

public class PageHelp {
	public static Page getPager(HttpServletRequest request, int totalRows) {

		Page pager = new Page(totalRows);

		String currentPage = request.getParameter("currentPage");
		int cPageNo = 1;
		try{
			cPageNo = Integer.parseInt(currentPage);
			if(cPageNo<=0) cPageNo=1;
		}catch(Exception e){}
		pager.refresh(cPageNo);
		
		String pagerMethod = request.getParameter("pageMethod");

		if (pagerMethod != null) {
			if (pagerMethod.equals("first")) {
				pager.first();
			} else if (pagerMethod.equals("previous")) {
				pager.previous();
			} else if (pagerMethod.equals("next")) {
				pager.next();
			} else if (pagerMethod.equals("last")) {
				pager.last();
			} 
			/*else if (pagerMethod.equals("go")) {
				String pageCnt = request.getParameter("pageCnt");
				int pageNo = 1;
				try{
					pageNo = Integer.parseInt(pageCnt);
					if(pageNo<=0) pageNo=1;
				}catch(Exception e){}
				pager.refresh(pageNo);
			}*/
		}
		return pager;
	}

	public static Page getPager(int totalRows) {

		Page pager = new Page(totalRows);

		return pager;
	}
}

action中的初始方法:

	public void pageResult(String sql) {
		/* 记录总数 */
		int totalRows = (int) queryUtil.getPageService().countBySql(sql);
		page = PageHelp.getPager(request, totalRows);
		//int totalPages = page.getTotalPages();
		//IDs = new ArrayList<ID>();
		
		List<String[]> ps = queryUtil.getPageService().findPaginationInfo(sql, page.getStartRow(), page.getPageSize());
		page.result = ps;
		//return ps;
	}
	

dao中 每页记录以及总记录方法:

package com.wondersgroup.workflow.page.dao.impl;

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

import javax.annotation.Resource;

import org.hibernate.SQLQuery;
import org.springframework.orm.hibernate3.HibernateTemplate;
import org.springframework.stereotype.Repository;

import com.wondersgroup.workflow.page.dao.PageDao;
import com.wondersgroup.workflow.util.StringUtil;

@Repository("pageDao")
public class PageDaoImpl implements PageDao{
	private HibernateTemplate hibernateTemplate;

	public HibernateTemplate getHibernateTemplate() {
		return hibernateTemplate;
	}
	//注入hibernateTemplate
	@Resource(name="hbmtpl")
	public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {
		this.hibernateTemplate = hibernateTemplate;
	}
	@SuppressWarnings("unchecked")
	@Override
	public int countBySql(String sql) {
		List list =this.hibernateTemplate.getSessionFactory().getCurrentSession().createSQLQuery(sql).list();
		return list.size();
	}
	@SuppressWarnings("unchecked")
	@Override
	public int countByHql(String hql) {
		List list = this.hibernateTemplate.getSessionFactory().getCurrentSession().createQuery(hql).list();
		return list.size();
	}
	@SuppressWarnings("unchecked")
	@Override
	public List<String[]> findPaginationInfo(String sql, int startRow, int pageSize) {
		List list = new ArrayList();
		List<String[]> finlist = new ArrayList();
		SQLQuery query  = this.hibernateTemplate.getSessionFactory().getCurrentSession().createSQLQuery(sql);
		list = query.setFirstResult(startRow).setMaxResults(pageSize).list();
		Iterator<String[]> it = list.iterator();
		while(it.hasNext()){
			Object[] objArr = (Object[])it.next();
			String[] ret = new String[objArr.length];
			for(int i=0; i<objArr.length; i++){
				ret[i] = StringUtil.getNotNullValueString(objArr[i]);
			}
			finlist.add(ret);
		}
		return finlist;
	}
	
}



  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值