首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

struts+spring+hibernate通用分页步骤 (2)

2012-11-19 
struts+spring+hibernate通用分页方法 (2)接上:!--1、? !--另外可以使用HQL来实现分页,在dao中: java 代

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

<!---->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,?0,?1),?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页??
1 楼 zzb888 2007-07-26   能给个完整的包吗? 老大  谢谢了
我的地址
cwzb@dhc.com.cn 2 楼 onecan 2007-07-27   源代码看:http://www.inforshare.com.cn:8080/,admin/admin,user/user. 3 楼 cqjc 2007-07-30   源代码看:http://www.inforshare.com.cn:8080/,admin/admin,user/user.

打不开 4 楼 ljm3256748 2008-05-04   onecan
你给的代码不全呀,能给个全的吗?
ljm3256748@163.com

热点排行