资源描述:
《struts+spring+hibernate通用分页方法》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、分页有2种办法:1、从数据库中取得记录,在内存中再划分,如果遇到记录数很大的时候效率很成问题,此法不可取。2、采用hibernate的物理分页,每次只是取一页。从客户端传进来的是第几页和每页多少条记录,要首先查询符合记录的总记录数,再根据总记录数和当前页,每页记录数可以算出要取的是数据库中的第几条记录。2次查询不可避免了。单元测试如下:publicfinalvoidtestFindAllRole(){logger.debug("testFindAllRole");longl1=System.currentTimeMillis();Stringmyactio
2、n="roleList.do";StringcurPageNO="1";CriteriaQuerycq=newCriteriaQuery(Role.class,curPageNO,myaction);cq.setPageSize(10);PageSupportps=BeanFactory.getInstance().getRightDelegate().findAllRole(cq,state);longl2=System.currentTimeMillis();AppUtils.printCollection(ps.getResultList());Sy
3、stem.out.println("一共用时为:"+(l2-l1));}CriteriaQuery类是对hibernateQBC查询方法的封装,需要的参数是当前操作的实体类,myaction,curPageNO,pageSize,以便构造出相应的上下翻页的工具条。在delegate中只是将值向下传:publicPageSupportfindAllRole(CriteriaQuerycq,IStatestate){if(DelegateUtil.isNullParam(cq,"CriteriaQuery",state)){returnnull;}Reques
4、treq=newRequest();req.setServiceName(ServiceConsts.FindAllRoleProcessor);req.setValue("CriteriaQuery",cq);try{Responseresp=getDelegate().execute(req);DelegateUtil.setIState(state,resp);return(PageSupport)(resp.getValue("PageSupport"));}catch(Exceptione){DelegateUtil.handleExceptio
5、n(e,"findAllRole",state);}returnnewPageSupport();}在command中publicclassFindAllRoleextendsCommand{privateRoleDaodao;publicvoidsetDao(RoleDaodao){this.dao=dao;}publicvoidexecute(Mapparams,Mapresponse)throwsException{response.put("PageSupport",(PageSupport)dao.find((CriteriaQuery)para
6、ms.get("CriteriaQuery"),true));}……}直接就是调用dao的find方法:publicPageSupportfind(finalCriteriaQuerycq,finalbooleanisOffset){return(PageSupport)getHibernateTemplate().execute(newHibernateCallback(){publicObjectdoInHibernate(Sessionsession)throwsHibernateException,SQLException{Criteriacrit
7、eria=cq.getDetachedCriteria().getExecutableCriteria(session);//得到总行数intallCounts=((Integer)criteria.setProjection(Projections.rowCount()).uniqueResult()).intValue();criteria.setProjection(null);//还原intcurPageNO=PagerUtil.getCurPageNO(cq.getCurPage());//当前页intoffset=PagerUtil.getOf
8、fset(allCounts,curPageNO,cq.getPa