`

struts+spring+hibernate通用分页方法 (2)

    博客分类:
  • Java
阅读更多
接上:

strutsAction中:

java 代码
 
  1. private ActionForward findAllRole(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) {  
  2.         String curPageNO = request.getParameter("curPageNO");  
  3.         String myaction;  
  4.         String search=request.getParameter("search");  
  5.         //String myform="forms[0]";  
  6.         if(search==null){  
  7.             search="";  
  8.             myaction="findAllRole.do";  
  9.         }else{  
  10.             myaction="findAllRole.do?search="+search;  
  11.         }  
  12.         removeRequestAttribute(mapping,request);  
  13.         try {  
  14.             //Qbc查找方式  
  15.             CriteriaQuery cq=new CriteriaQuery(Role.class,curPageNO,myaction);  
  16.             cq.setPageSize(Constants.PAGE_SIZE);  
  17.             if(!AppUtils.isBlank(search)){  
  18.                 cq.like("name","%"+search+"%");   
  19.                 cq.add();  
  20.             }  
  21.             IState state=new StateImpl();  
  22.             PageSupport ps= (PageSupport)getBiz().findAllRole(cq, state);  
  23.             request.setAttribute("search",search);  
  24.             request.setAttribute("curPageNO",new Integer(ps.getCurPageNO()));  
  25.             request.setAttribute("offset"new Integer(ps.getOffset()+1));  
  26.             request.setAttribute("list", ps.getResultList());  
  27.             if(!AppUtils.isBlank(ps.getResultList()))  
  28.                 request.setAttribute("toolBar", ps.getToolBar());  
  29.         }catch (Exception e){  
  30.             return handleException(mapping, request, e, "RoleAction's findAllRole");  
  31.         }  
  32.         return mapping.findForward("view");  
  33.     } 

采用QBC对单表的分页很简单,只需要改变参数,并且在actionjsp之间传递。如果要分页的内容涉及到几张表,可以将业务逻辑封装为一个视图,并且做好视图相应的实体类,便可以象操纵单表一样。

<!---->1、  <!---->另外可以使用HQL来实现分页,在dao中:

java 代码
 
  1. public PageSupport find(final HqlQuery hqlQuery,final boolean needParameter)  
  2. {  
  3.     //logger.debug("find PageSupport ,HQL is: "+hqlQuery.getQueryString());  
  4.     return (PageSupport)getHibernateTemplate().execute(  
  5.     new HibernateCallback() {  
  6.         public Object doInHibernate(Session session) throws HibernateException, SQLException {  
  7.             Query query=session.createQuery(hqlQuery.getQueryString());  
  8.             if(needParameter)  
  9.                 query.setParameters(hqlQuery.getParam(), hqlQuery.getTypes());  
  10.             int allCounts=query.list().size();  
  11.             int curPageNO = PagerUtil.getCurPageNO(hqlQuery.getCurPage());  
  12.             int offset = PagerUtil.getOffset(allCounts, curPageNO, hqlQuery.getPageSize());  
  13.             String toolBar = PagerUtil.getBar(hqlQuery.getMyaction(),allCounts,curPageNO,hqlQuery.getPageSize());  
  14.             query.setFirstResult(offset);  
  15.             query.setMaxResults(hqlQuery.getPageSize());  
  16.             return new PageSupport(query.list(),toolBar,offset,curPageNO);  
  17.                 }         
  18.           }  
  19.     ,true);  
  20. }  

HqlQuery  代码如下:

java 代码
 
  1. public class HqlQuery  implements Serializable{  
  2.       
  3.     private String curPage=null ;  
  4.     private int pageSize=10;  
  5.     private String myaction;  
  6.     private String myform;  
  7.     private String queryString;  
  8.     private Object[] param;  
  9.     private Type[] types;  
  10.     public HqlQuery(String queryString, Object[] param) {  
  11.         this.queryString = queryString;  
  12.         this.param = param;  
  13.     }  
  14.       
  15.     public HqlQuery(String myaction) {  
  16.         this.myaction = myaction;  
  17.     }  
  18.     public Object[] getParam() {  
  19.         return param;  
  20.     }  
  21.       
  22.     public HqlQuery(String myaction, String queryString, Object[] param,Type[] types) {  
  23.         this.myaction = myaction;  
  24.         this.queryString = queryString;  
  25.         this.param = param;  
  26.         this.types=types;  
  27.     }  
  28.     public void setParam(Object[] param) {  
  29.         this.param = param;  
  30.     }  
  31.     public String getCurPage() {  
  32.         return curPage;  
  33.     }  
  34.     public void setCurPage(String curPage) {  
  35.         this.curPage = curPage;  
  36.     }  
  37.     public String getMyaction() {  
  38.         return myaction;  
  39.     }  
  40.     public void setMyaction(String myaction) {  
  41.         this.myaction = myaction;  
  42.     }  
  43.     public String getMyform() {  
  44.         return myform;  
  45.     }  
  46.     public void setMyform(String myform) {  
  47.         this.myform = myform;  
  48.     }  
  49.     public int getPageSize() {  
  50.         return pageSize;  
  51.     }  
  52.     public void setPageSize(int pageSize) {  
  53.         this.pageSize = pageSize;  
  54.     }  
  55.     public String getQueryString() {  
  56.         return queryString;  
  57.     }  
  58.     public void setQueryString(String queryString) {  
  59.         this.queryString = queryString;  
  60.     }  
  61.     public Type[] getTypes() {  
  62.         return types;  
  63.     }  
  64.     public void setTypes(Type[] types) {  
  65.         this.types = types;  
  66.     }  
  67.   
  68. }  

 

如此的单元测试:

java 代码
 
  1. public final void testfindOtherFunctionByHql() {  
  2.     logger.debug("testfindFunctionByRole");  
  3.     long l1=System.currentTimeMillis();  
  4.     String queryString="from Function where id=?";  
  5.     HqlQuery hqlQuery=new HqlQuery("myaction");  
  6.     hqlQuery.setCurPage("1");  
  7.     //hqlQuery.setPageSize(10);  
  8.       
  9.     PageSupport functions=BeanFactory.getInstance().getRightDelegate().findOtherFunctionByHql(hqlQuery,"1", state);  
  10.     long l2=System.currentTimeMillis();  
  11.     AppUtils.printCollection(functions.getResultList());  
  12.     List list=functions.getResultList();  
  13.     for(int i=0;i
  14.         Function f=(Function)list.get(i);  
  15.         System.out.println("getId = "+f.getId());  
  16.     }  
  17.     System.out.println("一共用时为 :  "+(l2-l1));          
  18. }  

总结:将分页的功能封装起来,每次请求构造参数不同的CriteriaQuery HqlQuery,后台的操作都是重复不变的,变得是查询的条件。如使用CriteriaQuery可以这样构造条件,Or或者and的条件可以用面向对象的方式来构造:

java 代码
 
  1. public final void findAllRole() {  
  2.     logger.debug("findAllRole");  
  3.     long l1=System.currentTimeMillis();  
  4.     String curPage = "2";  
  5.     String myaction="xxx.do?";           //Struts action的名字,看工具条的提示  
  6.     String myform="forms[0]";           //html 里面相应的form的名字  
  7.     CriteriaQuery cq=new CriteriaQuery(Role.class,curPage,myaction,myform); //Role.class为指定的类  
  8.     cq.setPageSize(2);                //不填默认为10     
  9.     cq.setCurPage(curPage);          //当前页,默认是第一页  
  10.     cq.addOrder("asc","id");        //根据id来排序,顺序是asc,或者是desc  
  11.     cq.like("name""ROLE_SUPERVISOR");      //条件0是name='test',其余大于小于like调用相应的API  
  12.     cq.eq("enabled""1");//1    //条件1  
  13.     cq.eq("roleType""ROLE_SUPERVISOR");//条件2  
  14.     //cq.add();          //条件1&&条件2  
  15.     cq.add(cq.or(cq.and(cq, 01), cq, 2));  
  16.     //cq.add();                       //增加条件,如果没有条件之间的关系则可以直接add()不带参数。  
  17.   
  18.     PageSupport ps=BeanFactory.getInstance().getRightDelegate().findAllRole(cq,state);  
  19.     long l2=System.currentTimeMillis();  
  20.     System.out.println("list size:  "+ps.getResultList().size());  
  21.     System.out.println("一共用时为 :  "+(l2-l1));  
  22.     for(int i=0;i
  23.         Role role=(Role)ps.getResultList().get(i);  
  24.         System.out.println("id = "+ role.getId());  
  25.             //print your code here  
  26.               
  27.             System.out.println("-----------------");  
  28.             }  
  29.     AppUtils.printCollection(ps.getResultList());  
  30.     System.out.println(ps.getToolBar());  
  31. }  

cq.add(cq.or(cq.and(cq, 0, 1), cq, 2)),这句是为CriteriaQuery增加条件。意思是条件(0 and 1 or 2。以下是日志打出来的结果:<o:p></o:p>

java 代码
 
  1. DEBUG [14:50:53] (POJODelegate.java:execute:82) - POJODelegate executing  
  2.  INFO [14:50:53] (SequenceProcessor.java:doActivities:23) - SequenceProcessor 流程开始 <-- FindAllRoleProcessor  
  3.  INFO [14:50:53] (SequenceProcessor.java:doActivities:32) - 活动 : FindAllRole  
  4. Hibernate: select count(*) as y0_ from t_role this_ where ((this_.name like ? and this_.enabled=?) or this_.role_type=?) order by this_.id asc  
  5. //首先查出总的记录数  
  6. Hibernate: select this_.id as id0_, this_.name as name3_0_, this_.role_type as role3_3_0_, this_.enabled as enabled3_0_, this_.note as note3_0_ from t_role this_ where ((this_.name like ? and this_.enabled=?) or this_.role_type=?) order by this_.id asc limit ?  
  7.  INFO [14:50:53] (SequenceProcessor.java:doActivities:69) -  SequenceProcessor 流程结束 -->  
  8. list size:  1  
  9. 一共用时为 :  531  
  10. id = 1  
  11. -----------------  
  12. 首页 上一页 下一页 尾页  共1条记录  转到"location='xxx.do?&curPageNO='+this.options[this.selectedIndex].value">1' selected>第1页  
分享到:
评论
4 楼 ljm3256748 2008-05-04  
onecan
你给的代码不全呀,能给个全的吗?
ljm3256748@163.com
3 楼 cqjc 2007-07-30  
源代码看:http://www.inforshare.com.cn:8080/,admin/admin,user/user.

打不开
2 楼 onecan 2007-07-27  
源代码看:http://www.inforshare.com.cn:8080/,admin/admin,user/user.
1 楼 zzb888 2007-07-26  
能给个完整的包吗? 老大  谢谢了
我的地址
cwzb@dhc.com.cn

相关推荐

    struts+spring+hibernate通用分页方法

    struts+spring+hibernate通用分页方法.rar 博文链接:https://igogogo9.iteye.com/blog/97692

    Struts+Spring+Hibernate通用分页解决方案

    7. **文件`struts+spring+hibernate通用分页方法.doc`**:这个文档可能包含了具体的实现步骤、代码示例和注意事项,详细阐述如何将Struts、Spring和Hibernate整合起来,构建一个通用的分页功能。读者可以参考文档中...

    Struts2 + Spring2 + Hibernate3经典分页(包含java及jsp源码)

    ### Struts2 + Spring2 + Hibernate3 经典分页技术解析 #### 一、概述 在企业级应用开发中,分页显示是常见的需求之一。对于数据量较大的查询结果,采用分页的方式不仅能减轻服务器的压力,提高用户体验,还能更好...

    struts2+spring2+hibernate3注册查询搜索分页实例

    总的来说,这个"Struts2+Spring2+Hibernate3注册查询搜索分页实例"是一个很好的学习资源,涵盖了Java Web开发中的基础和核心部分。通过学习这个实例,开发者不仅可以掌握三大框架的基本用法,还能了解到如何将它们...

    struts+hibernate+spring集成实现分页

    2. **创建DAO**:实现分页查询的方法,使用Hibernate的Session或SessionFactory进行数据库操作。 3. **配置Service**:在Spring中声明Service,注入DAO,实现业务逻辑,包括计算总页数、获取当前页数据等。 4. **...

    使用Struts + Spring + Hibernate完成分页笔记

    "使用Struts + Spring + Hibernate完成分页笔记"这个主题涵盖了三个关键的Java EE框架:Struts、Spring和Hibernate,它们分别负责表现层、业务逻辑层和数据访问层的管理。下面将详细介绍这三个框架在分页实现中的...

    struts2 + spring 3 + hibernate3.3整合实现图书馆管理管理

    Struts2、Spring和Hibernate是Java Web开发中的三大框架,它们的整合应用广泛用于构建复杂的Web应用程序,如本例中的图书馆管理系统。这个系统实现了用户登录和注册功能,并且提供了对书籍表的操作,包括增、删、改...

    新闻发布系统JAVA源码(struts+spring+hibernate)

    【新闻发布系统JAVA源码(struts+spring+hibernate)】是一个典型的Java Web应用程序,它利用了Struts、Spring和Hibernate三大开源框架的集成来构建高效、可维护的新闻发布平台。这个系统的主要目的是提供一个发布、...

    ext3+struts2+hibernate+spring的CRUD+分页

    同时,Struts2和Spring也可以配合提供分页支持,例如通过Action类中的方法返回分页信息,或者利用Spring的Pageable接口和Page对象。 在实际项目中,"sshext"的结构可能包含以下几个部分: 1. `WebRoot`:这是Web...

    struts+spring+hibernate 分页

    在 Struts+Spring+Hibernate 结构中实现分页,需要结合这三大框架的特点来设计和实现。 首先,Struts 在控制器层中处理用户的请求,比如用户点击分页链接时,Struts 框架会调用相应的Action类方法。在这个方法中,...

    android访问struts2+spring+hibernate应用

    此压缩包含有两个工程,一个工程是struts2+spring2.5+hibernate3.3整合的服务器端技术(全注解)(云端),另一个工程是android的手机应用,包含对ssh整合的云端数据的访问,能够在android输入信息,将数据传递给...

Global site tag (gtag.js) - Google Analytics