浏览 1653 次
锁定老帖子 主题:Hibernate 分页
精华帖 (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(); } 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-06-25
代码没有缩进,看起来很累
|
|
返回顶楼 | |
发表时间:2009-06-25
炫速飞火 写道 代码没有缩进,看起来很累 复制到编辑器里面就可以了 |
|
返回顶楼 | |