`

Hibernate简单分页

阅读更多

1.创建Page实体类

public class Page {
	
	private int pageSize;		//页容量
	private int totalPage;		//总页数
	private int currentPage;	//当前页
	private boolean isFirstPage;//是否第一页
	private boolean isLastPage;	//是否最后一页
	private boolean hasPreviousPage;	//是否有上一页
	private boolean hasNextPage;		//是否有下一页
	private List list;			//数据集合

	public int getPageSize() {
		return pageSize;
	}
	public void setPageSize(int pageSize) {
		this.pageSize = pageSize;
	}
	public int getTotalPage() {
		return totalPage;
	}
	public void setTotalPage(int totalPage) {
		this.totalPage = totalPage;
	}
	public int getRowCount() {
		return rowCount;
	}
	public void setRowCount(int rowCount) {
		this.rowCount = rowCount;
	}
	public int getCurrentPage() {
		return currentPage;
	}
	public void setCurrentPage(int currentPage) {
		this.currentPage = currentPage;
	}
	public boolean isFirstPage() {
		return isFirstPage;
	}
	public void setFirstPage(boolean isFirstPage) {
		this.isFirstPage = isFirstPage;
	}
	public boolean isLastPage() {
		return isLastPage;
	}
	public void setLastPage(boolean isLastPage) {
		this.isLastPage = isLastPage;
	}
	public boolean isHasPreviousPage() {
		return hasPreviousPage;
	}
	public void setHasPreviousPage(boolean hasPreviousPage) {
		this.hasPreviousPage = hasPreviousPage;
	}
	public boolean isHasNextPage() {
		return hasNextPage;
	}
	public void setHasNextPage(boolean hasNextPage) {
		this.hasNextPage = hasNextPage;
	}
	public List getList() {
		return list;
	}
	public void setList(List list) {
		this.list = list;
	}
	
}

 

2.创建IPageDao接口

public interface IPageDao {
	void init(int start, int pageSize,String tableName);	//Page初始化
	void setPageSize(int pageSize);		//1.设置页容量
	void setTotalPage(String tableName);    //2.设置总页数
	void setCurrentPage();			//3.设置当前页
	void setIfFirstAndIfLast();		//4.设置是否首尾页
	void setHasPreviousPageAndLastPage();   //5.设置是否有上下页
	void setList(String tableName);		//6.设置总记录数
	Page getPage();				//获取Page对象
}

 

3.创建PageDaoImpl实现类

public class PageDaoImpl implements IPageDao{
	
	private ProjectDao projectDao ;
	
	private int start;
	private Page page;
	
	/**
	 * Page对象初始化
	 * @param start	传入的当前页
	 * @param pageSize	传入的页容量
	 * @param tableName	传入的表名
	 */
	public void init(int start,int pageSize,String tableName) {
		this.start = start;
		page = new Page();
		projectDao = new ProjectDao();
		setPageSize(pageSize);
		setTotalPage(tableName);
		setCurrentPage();
		setIfFirstAndIfLast();
		setHasPreviousPageAndLastPage();
		setList(tableName);
	}
	
	/**
	 * 1.设置页容量:用于设置总页数
	 */
	public void setPageSize(int pageSize) {
		if (pageSize <= 0) {
			page.setPageSize(10);
		}
		else {
			page.setPageSize(pageSize);
		}
	}
	
	/**
	 * 2.设置总页数:在判断当前页是否大于总页数时用到
	 */
	public void setTotalPage(String tableName) {
		int rowCount = 0;
		if (tableName.equals("items")) {
			rowCount = projectDao.getItemsRowCount();
		}
		else if (tableName.equals("application")) {
			rowCount = projectDao.getAppsRowCount();
		}
		int pageSize = page.getPageSize();
		if (rowCount%pageSize > 0) {
			page.setTotalPage(rowCount/pageSize + 1);
		} 
		else {
			page.setTotalPage(rowCount/pageSize);
		}
	}
	
	/**
	 * 3.设置当前页:在之后的上下页和首尾页都需要用到
	 */
	public void setCurrentPage() {
		if (start < 1) {
			page.setCurrentPage(1);
		} 
		else if (start > page.getTotalPage()) {
			page.setCurrentPage(page.getTotalPage());
		}
		else {
			page.setCurrentPage(start);
		}
	}
	
	/**
	 * 4.设置是否首页或尾页
	 */
	public void setIfFirstAndIfLast() {
		page.setFirstPage(page.getCurrentPage() > 1 ? false:true);
		page.setLastPage(page.getCurrentPage() < page.getTotalPage() ? false:true);
	}
	
	/**
	 * 5.设置是否有上一页和下一页
	 */
	public void setHasPreviousPageAndLastPage() {
		page.setHasPreviousPage(page.getCurrentPage() == 1 ? false:true);
		page.setHasNextPage(page.getCurrentPage() == page.getTotalPage() ? false:true);
	}
	
	/**
	 * 6.设置数据
	 */
	public void setList(String tableName) {
		int currentPage = page.getCurrentPage();
		int pageSize = page.getPageSize();
		int startIndex = pageSize * (currentPage - 1);
		if (tableName.equals("items")) {
			page.setList(projectDao.getItemsByPage(startIndex, pageSize));
		}
		else if (tableName.equals("application")) {
			page.setList(projectDao.getAppsByPage(startIndex, pageSize));
		}
	}
	
	public Page getPage() {
		return page;
	}
}

 

4.创建通过数据库获取数据的方法

/**
	 * 通过分页获取财政专项
	 * @param startIndex
	 * @param pageSize
	 * @return
	 */
	public List getItemsByPage(int startIndex, int pageSize) {
		Session s = null;
		List list = null;
		try {
			s = HibernateUtil.getSession();
			s.beginTransaction();
			Query query = s.createSQLQuery("select i.name,p.fileno from items i,policy p where i.isleaf = 1 and i.defaultpolicyid = p.id");
			query.setFirstResult(startIndex);
			query.setMaxResults(pageSize);
			list = query.list();
		} catch (Throwable e) {
			log.error(e.toString());
			HibernateUtil.endSession(s);
		} finally {
			HibernateUtil.endSession(s);
		}
		return list;
	}
	
	/**
	 * 获取财政专项总记录树
	 * @return
	 */
	public int getItemsRowCount() {
		int rowCount = 0;
		Session s = null;
		try {
			s = HibernateUtil.getSession();
			s.beginTransaction();
			Query query = s.createSQLQuery("select i.name,p.fileno from items i,policy p where i.isleaf = 1 and i.defaultpolicyid = p.id");
			List list = query.list();
			if (list != null) {
				rowCount = list.size();
			}
		} catch (Throwable e) {
			log.error(e.toString());
			HibernateUtil.endSession(s);
		} finally {
			HibernateUtil.endSession(s);
		}
		return rowCount;
	}
	
	/**
	 * 通过分页获取项目信息
	 * @param startIndex
	 * @param pageSize
	 * @return
	 */
	public List getAppsByPage(int startIndex, int pageSize) {
		Session s = null;
		List list = null;
		try {
			s = HibernateUtil.getSession();
			s.beginTransaction();
			Query query = s.createSQLQuery("select e.qymc,a.enpname,a.money,a.approvaldate from application a,enterprise e where stepid = 3 and status = 0 and a.swdjzh = e.swdjzh");
			query.setFirstResult(startIndex);
			query.setMaxResults(pageSize);
			list = query.list();
		} catch (Throwable e) {
			log.error(e.toString());
			HibernateUtil.endSession(s);
		} finally {
			HibernateUtil.endSession(s);
		}
		return list;
	}
	
	/**
	 * 获取公示企业项目总记录数
	 * @return
	 */
	public int getAppsRowCount() {
		Session s = null;
		int rowCount = 0;
		try {
			s = HibernateUtil.getSession();
			s.beginTransaction();
			Query query = s.createSQLQuery("select e.qymc,a.enpname,a.money,a.approvaldate from application a,enterprise e where stepid = 3 and status = 0 and a.swdjzh = e.swdjzh");
			List list = query.list();
			if (list != null) {
				rowCount = list.size();
			}
		} catch (Throwable e) {
			log.error(e.toString());
			HibernateUtil.endSession(s);
		} finally {
			HibernateUtil.endSession(s);
		}
		return rowCount;
	}

 

5.创建PageServlet

public class PageServlet extends HttpServlet {

	private static final long serialVersionUID = 719461503837296828L;
	
	private IPageDao pageDao;
	
	protected void doGet(HttpServletRequest request, HttpServletResponse respond)
	    throws ServletException, IOException {
		doPost(request,respond);
				
	}
			
	protected void doPost(HttpServletRequest request, HttpServletResponse response)
		throws ServletException, IOException {
		String action = request.getParameter("doType");
		if (action.equals("page")) {
			String tableName = request.getParameter("table");
			int start = Integer.valueOf(request.getParameter("page"));
			pageDao = new PageDaoImpl();
			pageDao.init(start, 0, tableName);//Page对象初始化
			Page page = pageDao.getPage();//获取Page对象
			request.setAttribute("currentPage", page.getCurrentPage());
			request.setAttribute("totalPages", page.getTotalPage());
			request.setAttribute("hasPrevious", page.isHasPreviousPage());
			request.setAttribute("hasNext", page.isHasNextPage());
			request.setAttribute("isFirst", page.isFirstPage());
			request.setAttribute("isLast", page.isLastPage());
			request.setAttribute("list", page.getList());
			if (tableName.equals("items")) {
				request.getRequestDispatcher("frontShow/itemShow.jsp").forward(request, response);     
			}
			else if (tableName.equals("application")) {
				request.getRequestDispatcher("frontShow/enpriseShow.jsp").forward(request, response);
			}
		}
	}

}

 

 

6.页面显示

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" isELIgnored="false"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>  
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" type="text/css" href="<%=request.getContextPath()%>/css/frontShow.css"/>
<script type="text/javascript" src="<%=request.getContextPath()%>/bootstrap/jquery-1.11.1.min.js"></script>
<link rel="stylesheet" type="text/css" href="<%=request.getContextPath()%>/bootstrap/bootstrap-theme.min.css" />
<link rel="stylesheet" type="text/css" href="<%=request.getContextPath()%>/bootstrap/bootstrap.min.css" />
<script type="text/javascript" src="<%=request.getContextPath()%>/bootstrap/bootstrap.min.js"></script>
<script type="text/javascript">

</script>
<title>企业公示项目</title>
</head>
<body background="<%=request.getContextPath()%>/images/b1.jpg" class="background">
	<div style="text-align:center">
		<img alt="财政专项" src="<%=request.getContextPath()%>/images/front.jpg" />
	</div>
	<div class="center">
		<div class="divBoder div1">
			<img alt="企业项目申报公示" src="<%=request.getContextPath()%>/images/qiyegongshi.png">
			<hr/>
			<center><a href="<%=request.getContextPath()%>/index.jsp"><img alt="返回首页" src="<%=request.getContextPath()%>/images/FrontPage.png"></a></center>
		</div>
		<div class="divBoder div2">
			<div>
				<br/>
				<table>
					<tr class="trTitle">
						<td width="50px;"></td>
						<td width="120px;">企业名称<hr class="hr"/></td>
						<td width="450px;">申报项目名称<hr class="hr"/></td>
						<td width="120px;">申报金额<hr class="hr"/></td>
						<td>申报日期<hr class="hr"/></td>
					</tr>
					<c:forEach items="${list}" var="item">
						<tr>
							<td width="50px;"></td>
							<td width="120px;"><strong>${item[0]}</strong><hr/></td>
							<td width="450px;">${item[1]}<hr/></td>
							<td width="120px;">${item[2]}元<hr/></td>
							<td>${item[3]}<hr/></td>
						</tr>
					</c:forEach>
				</table>
			</div>
			<center>
			<div>
				<span>
				<c:choose> 
					<c:when test="${isFirst}">
						首页
					</c:when>
					<c:otherwise>
						<a href="itemShow.page?doType=page&&page=1&&table=application">首页</a>
					</c:otherwise>
				</c:choose>
				</span>
				<span>
				<c:choose>
					<c:when test="${!hasPrevious}">
						上一页
					</c:when>
					<c:otherwise>
						<a href="itemShow.page?doType=page&&page=${currentPage-1}&&table=application">上一页</a>
					</c:otherwise>
				</c:choose>
				</span>
				<c:forEach var="index" begin="1" end="${totalPages}" step="1">
					<c:choose>
					<c:when test="${index==currentPage}">
						<span class="currentPage">${index}</span>
					</c:when>
					<c:otherwise>
						<a href="itemShow.page?doType=page&&page=${index}&&table=application">${index}</a>
					</c:otherwise>
					</c:choose>
				</c:forEach>
				<span>
					<c:if test="${!hasNext}">
						下一页
					</c:if>
					<c:if test="${hasNext}">
						<a href="itemShow.page?doType=page&&page=${currentPage+1}&&table=application">下一页</a>
					</c:if>
				</span>
				<span>
					<c:if test="${isLast}">
						尾页
					</c:if>
					<c:if test="${!isLast}">
						<a href="itemShow.page?doType=page&&page=${totalPages}&&table=application">尾页</a>
					</c:if>
				</span>
			</div>
			</center>
		</div>
	</div>
</body>
</html>

 

 

 7.页面



 
 

  • 大小: 3.3 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics