论坛首页 入门技术论坛

Hibernate 分页

浏览 1653 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (1) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-06-23   最后修改:2010-12-05

/**
	 * 
	 * @此方法描述的是:Hibernate分页
	 * @param request	
	 * @param HQL
	 * @param num 页面要要显示的页数
	 * @param maxResults 每页要显示多少行
	 * @param currentResult 首页的显示的末记录
	 * @return
	 * List
	 */
	protected List findPageResult(HttpServletRequest request,String HQL, int num, int maxResults, int currentResult){
		this.log.debug("BasicAction--->findPageResult--->start:");
		String pageFlag = request.getParameter("pageFlag");				//标志位,(下一页,上一页,最后一页,首页,跳转)
		int rows;    													//总行数
		int pages;														//总页数
		//int maxResults = 5;											//每页显示的行数
		int currentPage = 1;											//当前页数
		int startPage = 1;												//要显示的起始页
		int endPage = 1;												//要显示的最后一页
		int firstResult = 0;											//当前页首记录index
		//int currentResult = 5;										//当前页末记录index
		
		String currentPageTemp = request.getParameter("currentPages"); 	//获得当前页
		if(!this.trimnull(currentPageTemp).equals("")){
			currentPage = new Integer(currentPageTemp).intValue();
		}
		
		String firstResultTemp = request.getParameter("firstResults"); 	//获得当前页的首记录
		if(!this.trimnull(firstResultTemp).equals("")){
			firstResult = new Integer(firstResultTemp).intValue();
		}
		
		//初始化sessionFactory
		SessionFactory sessionFactory = (SessionFactory) BeanHelp.getBean("sessionFactory");
		Session session = sessionFactory.openSession();
		
		
		String rowsTemp = request.getParameter("rows");					//获得总行数
		if(!this.trimnull(rowsTemp).equals("") && !"0".equals(rowsTemp)){//如果总行数不为零或不为空的时候转化为整数,否则为第一次计算
			rows = new Integer(rowsTemp).intValue();
		}else{															//第一次计算
			String HQL_rows = "select count(*) " + HQL.substring(HQL.indexOf("from"));
			this.log.debug("HQL_rows="+HQL_rows);
			rows = ((Integer)(session.createQuery(HQL_rows).list().get(0))).intValue();//第一次计算得到总行数
		}
		this.log.debug("rows="+rows);
		
		String pagesTemp = request.getParameter("pages");
		if(!this.trimnull(pagesTemp).equals("") && !"0".equals(pagesTemp)){//如果总页数不为零或不为空的时候转化为整数,否则为第一次计算
			pages = new Integer(pagesTemp).intValue();
		}else if(rows == 0){
			pages = 0;				//总页数
			maxResults = 0;			//每页显示的行数
			currentPage = 0; 		//当前页
			firstResult = 0;		//当前页的首记录
			currentResult = 0;		//当前页的末记录
		}else{
			pages = rows/maxResults; //总行数除以每页显示的最大结果数表示为总页数
			firstResult = 1;
			if(pages < 1) {			
				currentResult = rows;//如果当前的结果大于1时,看是否有余数,如果有总页数加1
			}
			if(rows%maxResults>0){
				pages++;
			}
		}
		
		
		
		
		if(pages<num&&pages>=1) {								//如果总页数小于9时 
			endPage = pages;								//这个页最后显示的页数为 pages
			currentPage = currentPage;						//当前页为1
			startPage = 1;									//起始页为1 
			pages = pages;									//总页数
		}else if(pages>9){									//如果总页数大于9
			if(currentPage-num/2<1) {							//如果当前页-8<1
				endPage = num;								//这个页最后显示的页数为 pages
				currentPage = currentPage;					//当前页为1
				startPage = 1;								//起始页为1 
				pages = pages;								//总页数
			}else if (currentPage+num/2>pages){					//如果当前页+4<page
				endPage = pages;							//这个页最后显示的页数为 pages
				currentPage = currentPage;					//当前页为1
				startPage = pages-num-1;						//起始页为1 
				pages = pages;								//总页数
			}else{
				endPage = currentPage+num/2;					//这个页最后显示的页数为 pages
				currentPage = currentPage;					//当前页为1
				startPage = currentPage-num/2;					//起始页为1 
				pages = pages;
			}
		}else{
			pages = pages;									//这个页的最后显示的页数为 pages
			endPage = 0;									//这个页最后显示的页数为 pages
			currentPage = 0;								//当前页为1
			startPage = 1;

		}
		
		if(pageFlag==null){
			//
		}else if(pageFlag.equals("first")){					//首页
			currentPage = 1;								//当前页为1
			firstResult = 1;								//首记录为1
			if(rows/maxResults >1) {						//总行数/每页显示的最大结果数大于1
				currentResult = maxResults;					//当前页的麽记录=每页显示的最大结果数
			} else {										//总行数/每页显示的最大结果数小于1
				currentResult = rows%maxResults;			//当前页的麽记录=总行数/每页要显示最大结果的余数
			}
		}else if(pageFlag.equals("last")){					//末页
			firstResult = (pages-1)*maxResults;				//当前页的首记录=总页数减一乘以每页要显示的最大结果数
			currentPage = pages;							//当前页就等于总页数
			currentResult = rows;							//当前页的麽记录=总行数 
		}else if(pageFlag.equals("next")){					//下一页
			currentPage = currentPage + 1;					//当前页加以
			firstResult = firstResult+maxResults;			//当前页的首记录 = 上一页的首记录+每页显示的最大结果
			if(pages > currentPage) {						//如果总页数大于当前页
				currentResult = firstResult + maxResults - 1;	//当前页的麽记录 = 当前页的首记录+每页显示的最大结果
			} else {										//负责
				if(rows%maxResults==0) {
					currentResult = rows;					//当前页的麽记录 = 当前页的首记录 + 总行数/每页要显示最大结果的余数
				}else{
					currentResult = firstResult + rows%maxResults-1;//当前页的麽记录 = 当前页的首记录 + 总行数/每页要显示最大结果的余数
				}
			}
		}else if(pageFlag.equals("before")){				//上一页
			currentResult = firstResult-1;					//当前页的麽记录 = 上一页的首记录
			firstResult = firstResult - maxResults;			//当前页的首记录 = 上一页的首记录 - 每页显示的最大结果数
			currentPage--;
		}else if(pageFlag.equals("changePage")){			//跳页
			firstResult = (currentPage-1)*maxResults+1;		//当前页的首记录 = (当前页-1)*每要显示的最大结果数
			if(pages > currentPage) {						//如果总页数大于当前页
				currentResult = firstResult + maxResults-1;	//当前页的麽记录 = 当前页的首记录 + 每页显示的最大结果数
			} else {
				//currentResult = firstResult + rows%maxResults-1;//当前页的麽记录 = 当前页的首记录 + 总行数/每页要显示最大结果的余数
				if(rows%maxResults==0) {
					currentResult = firstResult+maxResults-1;					//当前页的麽记录 = 当前页的首记录 + 总行数/每页要显示最大结果的余数
				}else{
					currentResult = firstResult + rows%maxResults-1;//当前页的麽记录 = 当前页的首记录 + 总行数/每页要显示最大结果的余数
				}
			}
			
		}
		
		
		List list = session.createQuery(HQL).setFirstResult(firstResult-1).setMaxResults(maxResults).list();
		session.close();
		
		request.setAttribute("rows",rows);					//总行数
		request.setAttribute("pages",pages);				//总页数
		request.setAttribute("currentPages",currentPage);	//当前页
		request.setAttribute("maxResults",maxResults);		//当前显示的行数
		request.setAttribute("firstResults",firstResult);	//当前页的首记录
		request.setAttribute("currentResults",currentResult);//当前页的末记录
		request.setAttribute("endPages",endPage);			//当前页显示的最后页数
		request.setAttribute("startPages",startPage);		//当前页显示的起始页数
		System.out.println("rows==========="+rows);
		System.out.println("pages==========="+pages);
		System.out.println("maxResults==========="+maxResults);
		System.out.println("firstResult==========="+firstResult);
		System.out.println("currentResult==========="+currentResult);
		System.out.println("startPage==========="+startPage);
		System.out.println("currentPages==========="+currentPage);
		System.out.println("endPages==========="+endPage);
		return list;
	}
	
	public String trimnull(String src){
		if(src==null||src.equalsIgnoreCase("null")){
			return "";
		}
		return src.trim();
	}
   发表时间:2009-06-25  
代码没有缩进,看起来很累
0 请登录后投票
   发表时间:2009-06-25  
炫速飞火 写道
代码没有缩进,看起来很累

复制到编辑器里面就可以了
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics