`
blaiu
  • 浏览: 131097 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Hibernate 分页

阅读更多
public class Pager {
	
	
	private int rows;					//总行数
	private int pages;					//总页数
	private int currentPages;			//当前页
	private int maxResults;				//当前显示的行数
	private int firstResults;			//当前页的首记录
	private int currentResults;			//当前页的末记录
	private int endPages;				//当前页显示的最后页数
	private int startPages;				//当前页显示的起始页数
	
	

	
	
	public Pager() {   
	}   							
	
	/**
	 * 
	 * @param _totalRows 总记录数
	 * @param _pageSize	每页显示的行数
	 * @param _pageShow	要显示的页数
	 * @param _currentPage 当前页
	 */
	public Pager(int _totalRows, int _pageSize, int _pageShow, int _currentPage) { 
		rows = _totalRows;			//查询的总记录数
		maxResults = _pageSize;
		currentPages = _currentPage;

		if(rows==0){				//总记录数为零将所有的记录都赋为零
			pages = 0;				//总页数
			maxResults = 0;			//每页显示的行数
			currentPages = 0; 		//当前页
			firstResults = 0;		//当前页的首记录
			currentResults = 0;		//当前页的末记录
		}else{
			pages = rows/_pageSize;   //总记录/每页要显示的记录=总页数
			int mod = rows%_pageSize; //总记录和每页要显示的记录求余结果大于0总页数加1  
			if(mod>0){   
				pages++;   
			}   
			firstResults = 1;   	//设置当前第一条记录为零
		}
		
		
		if(pages<_pageShow && pages>=1) {					//如果总页数小于显示的页数 
			endPages = pages;								//则: 要显示的页数=总页数
			startPages = 1;									//则:当前起始页为1 
			endPages = _pageShow;
		}else if(pages>_pageShow){							//如果总页数大于显示的页数
			if(currentPages-_pageShow/2<1) {				//如果当前页-显示页数/2<1
				endPages = _pageShow;						//则:这个页最后显示的页数为 _pageShow
				startPages = 1;								//则:起始页为1 
			}else if (currentPages+_pageShow/2>pages){		//如果当前页+显示页数/2<pages
				endPages = pages;							//则:显示的页数为 pages
				startPages = pages-_pageShow+1;				//则:起始页为pages-_pageShow 
			}else{
				endPages = currentPages+_pageShow/2;		//显示的页数
				startPages = currentPages-_pageShow/2+1;	//起始页 
				
			}
		}else if(pages==_pageShow){
			if(currentPages-_pageShow/2<1) {				//如果当前页-显示页数/2<1
				endPages = _pageShow;						//则:这个页最后显示的页数为 _pageShow
				startPages = 1;								//则:起始页为1 
			}else if (currentPages+_pageShow/2>pages){		//如果当前页+显示页数/2<pages
				endPages = pages;							//则:显示的页数为 pages
				startPages = pages-_pageShow+1;				//则:起始页为pages-_pageShow 
			}else{
				endPages = currentPages+_pageShow/2;		//显示的页数
				startPages = currentPages-_pageShow/2+1;	//起始页 
			}
		}else{
			System.out.println("错误");
			endPages = 0;									//显示的页
			currentPages = 0;								//当前页
			startPages = 0;									//起始页
		}

		
	}
	public int getRows() {
		return rows;
	}
	public void setRows(int rows) {
		this.rows = rows;
	}
	public int getPages() {
		return pages;
	}
	public void setPages(int pages) {
		this.pages = pages;
	}
	public int getCurrentPages() {
		return currentPages;
	}
	public void setCurrentPages(int currentPages) {
		this.currentPages = currentPages;
	}
	public int getMaxResults() {
		return maxResults;
	}
	public void setMaxResults(int maxResults) {
		this.maxResults = maxResults;
	}
	public int getFirstResults() {
		return firstResults;
	}
	public void setFirstResults(int firstResults) {
		this.firstResults = firstResults;
	}
	public int getCurrentResults() {
		return currentResults;
	}
	public void setCurrentResults(int currentResults) {
		this.currentResults = currentResults;
	}
	public int getEndPages() {
		return endPages;
	}
	public void setEndPages(int endPages) {
		this.endPages = endPages;
	}
	public int getStartPages() {
		return startPages;
	}
	public void setStartPages(int startPages) {
		this.startPages = startPages;
	} 
	
	
	public void first(){
		currentPages = 1;								//当前页为1
		firstResults = 1;								//首记录为1
		if(rows/maxResults >1) {						//总行数/每页显示的最大结果数大于1
			currentResults = maxResults;				//当前页的麽记录=每页显示的最大结果数
		} else {										//总行数/每页显示的最大结果数小于1
			currentResults = rows%maxResults;			//当前页的麽记录=总行数/每页要显示最大结果的余数
		}
	}
	
	public void last(){
		firstResults = (pages-1)*maxResults;			//当前页的首记录=总页数减一乘以每页要显示的最大结果数
		currentPages = pages;							//当前页就等于总页数
		currentResults = rows;							//当前页的麽记录=总行数 
	}
	
	public void next(){
		if(currentPages==pages){
			this.last();
		}else{
			currentPages = currentPages + 1;				//当前页加1
			firstResults = (currentPages - 1) * maxResults +1;			//当前页的首记录 = 上一页的首记录+每页显示的最大结果
			if(pages > currentPages) {						//如果总页数大于当前页
				currentResults = firstResults + maxResults - 1;	//当前页的麽记录 = 当前页的首记录+每页显示的最大结果
			} else {										//负责
				if(rows%maxResults==0) {
					currentResults = rows;					//当前页的麽记录 = 当前页的首记录 + 总行数/每页要显示最大结果的余数
				}else{
					currentResults = firstResults + rows%maxResults-1;//当前页的麽记录 = 当前页的首记录 + 总行数/每页要显示最大结果的余数
				}
			}
		}
	}
	
	public void before(){
		if(currentPages==1){
			this.first();
		}else{
			currentResults = (currentPages - 1) * maxResults-1;					//当前页的麽记录 = 上一页的首记录
			firstResults = currentResults - maxResults;			//当前页的首记录 = 上一页的首记录 - 每页显示的最大结果数
			currentPages--;
		}
	}
	
	public void changePage(){
		firstResults = (currentPages-1)*maxResults+1;		//当前页的首记录 = (当前页-1)*每要显示的最大结果数
		if(pages > currentPages) {						//如果总页数大于当前页
			currentResults = firstResults + maxResults-1;	//当前页的麽记录 = 当前页的首记录 + 每页显示的最大结果数
		} else {
			if(rows%maxResults==0) {
				currentResults = firstResults+maxResults-1;					//当前页的麽记录 = 当前页的首记录 + 总行数/每页要显示最大结果的余数
			}else{
				currentResults = firstResults + rows%maxResults-1;//当前页的麽记录 = 当前页的首记录 + 总行数/每页要显示最大结果的余数
			}
		}
	}
	
	public void refresh(int _currentPage){
		currentPages = _currentPage;   
		if (currentPages > pages) {   
		last();   
		} 
	}
	
	
	
	

}

public class HelpPager {
	
	
	/**
	 * 
	 * @此方法描述的是:分页查询
	 * @param request	
	 * @param _totalRows	总记录数
	 * @param _pageSize		每页显示多少条
	 * @param _pageShow		要显示的多少页
	 * @return
	 * Pager
	 */
	public static Pager getPager(HttpServletRequest request,   
			int _totalRows, int _pageSize, int _pageShow) { 
		

			
			
		
			//定义pager对象,用于传到页面
			int _currentPage = 1;
			String currentPage = request.getParameter("currentPages");   
			if(null!=currentPage && !"".equals(currentPage)){
				_currentPage = Integer.valueOf(currentPage);
			}
		
			Pager pager = new Pager(_totalRows, _pageSize, _pageShow, _currentPage);   
			//从Request对象中获取当前页号   
			//如果当前页号为空,表示为首次查询该页   
			//如果不为空,则刷新pager对象,输入当前页号等信息   
//			if (currentPage != null) {   
//				pager.refresh(Integer.parseInt(currentPage));   
//			}   
			//获取当前执行的方法,首页,前一页,后一页,尾页。   
			String pagerMethod = request.getParameter("pageFlag");   
			if (pagerMethod != null) {   
				if (pagerMethod.equals("first")) {   
					pager.first();   
				} else if (pagerMethod.equals("last")) {   
					pager.last();   
				} else if (pagerMethod.equals("next")) {   
					pager.next();   
				} else if (pagerMethod.equals("before")) {   
					pager.before();   
				} else if(pagerMethod.equals("changePage")){
					pager.changePage();
				}
			}else{
				pager.refresh(_currentPage);
			}   
			return pager;   
	}   

}
public class OrderAction extends BaseAction{

	public ActionForward execute(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		System.out.println("查询翻译清单");
		ITrOrder iTrOrder = (ITrOrder) BeanHelp.getBean("iTrOrder");
		Date date = null;
		
		int n = iTrOrder.getHoTranslateOrderRow("one", "two", date, "four", "five", "six");
		Pager pager = HelpPager.getPager(request, n, 2, 2);
		List list = iTrOrder.getHoTranslateOrderList(2, pager.getFirstResults(), "one", "two", date, "four", "five", "six");
		request.setAttribute("list", list);
		request.setAttribute("pager", pager);
		return mapping.findForward("back");
	}

}


jsp:
<div class="page">
     	每页<span class="color_red">30</span>条/共<span class="color_red">${pager.rows}</span class="color_red">条  
     	第<span class="color_red">${pager.currentPages}</span>页/共<span>${pager.pages}</span>页
     	<!-- 
     	<a href="#">【首页】</a>
     	<a href="#">【上页】</a>
     	<a href="#">【下页】</a>
     	<a href="#">【末页】</a> 
     	 -->
     	<html:link action="/bid.do?pageFlag=first" paramName="pager" paramProperty="currentPages" paramId="currentPages">【首页】</html:link>
     	<html:link action="/bid.do?pageFlag=before" paramName="pager" paramProperty="currentPages" paramId="currentPages">【上页】</html:link>
     	<html:link action="/bid.do?pageFlag=next" paramName="pager" paramProperty="currentPages" paramId="currentPages">【下页】</html:link>
     	<html:link action="/bid.do?pageFlag=last" paramName="pager" paramProperty="currentPages" paramId="currentPages">【末页】</html:link>
     	转到 <input type="text" class="txt" id="jp" value="${pager.currentPages}"/> 页 <input type="button" value="GO" onclick="jumppage()"/> </div>
     	<script type="text/javascript">
     		var path = "";
			var ua = navigator.userAgent.split(";"); 
			if(ua[2].indexOf("Windows")!=-1) { 
				path = "/soho/"; 
			}else { 
				path = "http://soho.hereonline.com/"; 
			}
     		
     		function jumppage(){
     			var jp = document.getElementById("jp").value;
     			if(jp>${pager.pages}){
     				alert("超出页数范围");
     				return false;
     			}
     			if(jp<1){
     				alert("超出页数范围");
     				return false;
     			}
     			window.location=path+"bid.do?pageFlag=changePage&currentPages="+jp;
     		}
     	</script>
  </div>


DAO and Service:


/**
	 * 
	 * @此方法描述的是:查询 记录
	 * @param maxResults
	 * @param startResult
	 * @param one
	 * @param two	 
	 * @param three	
	 * @param four	
	 * @param five	 
	 * @param six	 
	 * @return
	 * List
	 */
public List getHoTranslateOrderList(int maxResults, int startResult, String one,
			String two, Date three, String four, String five, String six); 


	public List getHoTranslateOrderList(int maxResults, int startResult, String one,
			String two, Date three, String four, String five, String six) {
		String SQL = "select * from HereOnLine.HO_TranslateOrder ho";
			return queryBySQL(SQL, HoTranslateOrder.class, maxResults, startResult);
		
		
	}
	
	/**
	 * 
	 * @此方法描述的是:查询一共多少条记录
	 * @param one			 
	 * @param two			 
	 * @param three			 
	 * @param four			
	 * @param five			 
	 * @param six			 
	 * @return
	 * int
	 */
public int getHoTranslateOrderRow(String one, String two, Date there, String four, String five, String six);

public int getHoTranslateOrderRow(String one, String two, Date three,
			String four, String five, String six) {
		String SQL = "select count(*) from HO_TranslateOrder ho";
		return queryBySQLRows(SQL);

	}

Hibernate:

public List queryBySQL(String SQL, Class EntityClass, int maxResults, int startResults, Date startDate, Date endDate) {
		Session session = this.getHibernateSession();
		try {
			return session.createSQLQuery(SQL).addEntity(EntityClass)
											  .setFirstResult(startResults-1)
											  .setMaxResults(maxResults)
											  .setDate(0, startDate)
											  .setDate(2, endDate)
											  .list();
		} catch (HibernateException e) {
			e.printStackTrace();
			return null;
		}finally{
			session.close();
		}
	}

public int queryBySQLRows(String SQL){
		Session session = this.getHibernateSession();
		try {
			return Integer.valueOf(((session.createSQLQuery(SQL).list().get(0))).toString());
		} catch (Exception e) {
			e.printStackTrace();
			return 0;
		}finally{
			session.close();
		}
	}

2
1
分享到:
评论
3 楼 qiuxiaoj 2009-08-05  
代码太乱了,写得很累赘。不过精神可嘉,加油。
2 楼 CoderDream 2009-08-04  
缺少“ITrOrder”,博主最好把工程作为附件放上来!
1 楼 zywang 2009-08-04  
Hibernate分页?请问Hibernate在哪呢,没看到啊!

相关推荐

    Hibernate分页查询小结

    Hibernate分页查询小结

    Hibernate分页查询原理解读

    #### 三、Hibernate分页查询实现原理 ##### 3.1 使用SQL LIMIT实现分页 对于支持LIMIT关键字的数据库(例如MySQL),Hibernate会通过特定的方言(Dialect)来生成包含LIMIT关键字的SQL语句。具体实现如下: ```...

    hibernate分页查询 数据库连接

    此外,优化查询,避免N+1查询问题,合理设计实体关系,都能有效提升Hibernate分页查询的效率。 总结起来,Hibernate的分页查询和数据库连接管理是其强大功能的重要组成部分。正确理解和使用这些特性,能够帮助...

    hibernate分页Hibernate 分页的设计和编码

    标题与描述均提到了“Hibernate分页的设计和编码”,这表明文章主要聚焦于如何在Hibernate框架中实现数据分页功能。下面将详细解析这一主题的关键知识点。 ### Hibernate分页概念 Hibernate是Java环境下一个开放源...

    hibernate分页查询

    让我们深入探讨Hibernate分页查询的相关知识点。 一、Hibernate分页原理 Hibernate分页查询基于SQL的LIMIT和OFFSET子句,通过Session的createQuery或createSQLQuery方法创建查询,并设置FirstResult和MaxResults...

    strut2.0 + hibernate3.0 + jquery.datatables+mysql 5.0实现的 hibernate分页

    hibernate分页(无排序,搜索,仅仅分页显示),服务器端分页在datatables上展现,有关 datatables的知识请关注它的官网http://www.datatables.net/,datatables的功能很 全面。 2,建表的sql--studentinfo和插入...

    hibernate分页代码

    总结起来,"hibernate分页代码"是一个关于如何在Hibernate中进行分页查询的实践示例,适用于在MyEclipse环境下运行。通过Criteria API或HQL,开发者能够方便地实现分页功能,提升应用性能,为用户提供更好的体验。...

    Struts + Hibernate 分页实现

    在"Struts + Hibernate 分页实现"这个项目中,重点在于如何在Web应用中整合这两个框架,并实现数据的分页显示。分页是大型数据集处理时常见的需求,它能够帮助用户更有效地浏览和管理大量信息,避免一次性加载所有...

    struts2+spring+hibernate分页显示完整代码

    本篇文章将详细讲解如何在基于Struts2、Spring和Hibernate的项目中实现分页功能。 首先,我们从DAO层开始。在`MemberDao`接口中,我们定义了两个关键的方法,一个是用于分页查询,另一个是获取所有记录的数量。这两...

    Struts和Hibernate分页及查询

    在"Struts+Hibernate分页及条件查询练习"这个项目中,开发者可能采用了以下步骤: 1. **配置Struts和Hibernate**:首先,需要在项目中引入Struts和Hibernate的相关库,配置Struts的struts-config.xml文件和...

    使用hibernate分页查询

    1. **配置Hibernate分页**: 在Hibernate中,我们通常使用`Criteria`或`Query` API进行分页查询。`Criteria`提供了一种更面向对象的方式来执行SQL查询,而`Query` API则对应于原生的SQL语句。在这些API中,我们可以...

    hibernate分页技巧

    hibernate分页 博文链接:https://iomo.iteye.com/blog/243518

    Hibernate 分页查询效果

    本篇主要围绕"Hibernate分页查询效果"这一主题,深入探讨如何利用Hibernate框架实现高效、便捷的分页功能。 首先,Hibernate是一个优秀的Java持久化框架,它提供了ORM(对象关系映射)解决方案,使得开发者可以使用...

    hibernate分页

    **hibernate分页**是Java开发中一个重要的技术概念,特别是在处理大数据量时,为了提高用户体验和系统性能,分页查询是不可或缺的。Hibernate,作为一款强大的对象关系映射(ORM)框架,提供了多种实现分页查询的...

    高效率的dw+spring+hibernate分页演示例子

    这个"高效率的dw+spring+hibernate分页演示例子"提供了一个实用的示例,展示了如何将这三个框架整合起来,以实现高效的数据分页功能。 首先,让我们来逐一了解这三个技术: 1. **DWR (Direct Web Remoting)**:DWR...

    hibernate实现分页

    ### Hibernate分页基础 1. **Criteria API**:Hibernate的Criteria API允许我们创建动态查询,同时也支持分页。通过设置`setFirstResult()`和`setMaxResults()`方法,可以实现分页效果。例如: ```java Criteria ...

    struts+hibernate分页

    综上所述,"struts+hibernate分页"涉及到的主要是如何在Struts的控制层和Hibernate的数据层之间协调处理分页请求,以及在DAO层利用Hibernate的特性实现数据库查询的分页。理解并掌握这两个框架的分页机制,对于开发...

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

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

    hibernate分页例子.rar

    本教程将通过一个具体的“hibernate分页例子”来深入理解如何在Hibernate中实现分页功能。 在实际应用中,当数据量大到一定程度时,一次性加载所有数据会导致内存压力过大,影响系统性能。因此,分页查询成为一种...

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

    本主题将探讨如何在Hibernate分页类和JDBC的SQL分页方法之间实现完美的融合,以提高性能并提供更好的用户体验。 首先,让我们了解一下Hibernate的分页功能。Hibernate提供了一种方便的方式来处理分页查询,通过...

Global site tag (gtag.js) - Google Analytics