`

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
分享到:
评论

相关推荐

    STRUTS+ HIBERNATE 简单分页

    在大型项目中,为了提高用户体验,通常需要实现数据的分页展示,这正是"STRUTS+ HIBERNATE 简单分页"的主题。 首先,我们要理解分页的基本原理。分页主要是将大量数据分成若干小块,每次只加载一部分到页面上,这样...

    ssh框架模板+hibernate简单分页

    这个压缩包文件提供了一个SSH框架模板以及使用Hibernate实现的分页功能的例子代码。 **Struts2** 是一个MVC(Model-View-Controller)框架,负责处理HTTP请求,维护应用程序的业务逻辑和视图之间的分离。它通过...

    Struts+Hibernate实现分页

    而Hibernate则是一个强大的对象关系映射(ORM)工具,用于简化数据库操作,将Java对象与数据库表之间的交互变得更加简单。 在分页实现中,视图(View)部分通常负责显示数据和提供导航链接。在示例的`select.jsp`中...

    Hibernate中分页查询的封装。

    本文将深入探讨如何在Hibernate中进行分页查询的封装,并提供相关的源码和工具使用方法。 首先,我们需要了解Hibernate中的Criteria查询,这是实现分页查询的一种方式。Criteria API允许我们以面向对象的方式构建...

    Struts + Hibernate 实现简单分页功能

    本篇将详细讲解如何利用Struts和Hibernate来实现一个简单的分页功能。 首先,我们需要理解分页的基本原理。分页是为了提高用户体验,避免一次性加载大量数据导致页面加载慢或内存压力过大。在Web应用中,我们通常将...

    spring-boot基于hibernate实现简单分页

    在本文中,我们将深入探讨如何使用Spring Boot与Hibernate框架实现简单的分页功能。Spring Boot以其简洁的配置和快速的应用开发而受到广泛欢迎,而Hibernate作为Java领域中的一个强大的ORM(对象关系映射)工具,...

    Struts2+HIBERNATE实现分页(完整讲解)

    【Struts2+Hibernate实现分页详解】 在Java Web开发中,Struts2和Hibernate是两个非常重要的框架,它们分别负责MVC模式中的控制层和持久层。Struts2提供了强大的Action类和拦截器,使得业务逻辑处理更加简洁;而...

    java 实现的一个简单的hibernate分页类

    java 实现的一个简单的hibernate分页类 可以设置,从某一条开始取、显示的条数 不依赖struts spring

    hibernate经典分页源代码

    示例代码中的 `PageController` 类是一个简单的分页控制器,包含了分页所需的基本属性(如总行数、每页行数、当前页码等)。它还提供了方法来设置和获取这些属性,以及检查是否有前页和后页。在实际项目中,这个类...

    Struts2 + Hibernate3 分页程序

    在这个"Struts2 + Hibernate3 分页程序"中,我们将探讨如何在它们的集成环境下实现分页功能。 分页是Web应用中常见的功能,它允许用户以较小的数据块浏览大量数据,提高用户体验。在Hibernate3中,虽然没有提供内置...

    hibernate分页代码

    本教程将详细讲解如何在Hibernate中实现分页查询,以及如何在MyEclipse集成环境中运行这段代码。 首先,让我们了解什么是分页查询。分页查询是数据库管理中的一个常见需求,特别是在处理大量数据时,为了提高用户...

    在JDBC,hibernate中实现分页

    在Hibernate框架中实现分页功能相对较为简单。通过`Query`对象提供的方法即可轻松完成。 ##### 示例代码解析 ```java Query query = session.createQuery("from Student"); query.setFirstResult(firstResult); // ...

    Hibernate+sqlserver2000分页

    本篇文章将深入探讨使用Hibernate ORM框架与SQL Server 2000数据库进行分页查询的方法。 首先,Hibernate是Java领域中最流行的ORM(对象关系映射)框架之一,它允许开发者使用面向对象的方式操作数据库,减少了直接...

    关于Hibernate分页类和jdbc的sql分页完美融合

    然而,虽然这种方式简单易用,但当处理大数据集时,可能会遇到性能问题,因为Hibernate会加载所有满足条件的结果到内存中,然后再返回指定范围的结果。为了解决这个问题,我们可以利用JDBC的SQL分页来直接在数据库...

    Hibernate分页封装

    下面是一个简单的Hibernate分页封装的示例代码: ```java public class Happer extends HibernateDaoSupport { private int p; //当前页 private int size; //一页分多少条 private int nextPage; //下一页 ...

    hibernate和struts完美应用和分页演示示例

    hibernate和struts完美应用和分页演示示例 &lt;br&gt;此工程是hibernate和struts完美应用和分页演示示例。 &lt;br&gt;特点: 一、使用MS SERVER 2000的pubs数据库,并写了... 三、演示了数据查询的分页功能(较简单)。

    基于spring+hibernate的组合查询+分页组件

    以下是一个简单的示例,展示如何在Spring和Hibernate中实现组合查询和分页: ```java @Service public class UserService { @Autowired private SessionFactory sessionFactory; public Page&lt;User&gt; ...

    Hibernate分页显示和添加

    以下是一个简单的使用Criteria进行分页查询的例子: 1. 创建Criteria实例,设置查询条件。 ```java Session session = sessionFactory.openSession(); Criteria criteria = session.createCriteria(User.class); ``...

    struts+spring+hibernate通用分页方法

    ### Struts+Spring+Hibernate通用分页方法详解 #### 一、引言 在Web应用开发中,分页是一项常用且重要的功能。特别是在处理大量数据时,合理的分页策略能够显著提升用户体验并减轻服务器压力。Struts+Spring+...

    JDBC简单分页方案

    【JDBC简单分页方案】 在Java开发中,数据库记录的分页显示是常见的需求,尤其是在Web应用程序中。JDBC(Java Database Connectivity)是Sun公司制定的Java平台下的数据库连接标准接口,它提供了统一的方式来访问...

Global site tag (gtag.js) - Google Analytics