struts+spring+hibernate通用分页方法

 

关键字: struts spring hibernate 分页
分页有2种办法:

1、    从数据库中取得记录,在内存中再划分,如果遇到记录数很大的时候效率很成问题,此法不可取。

2、    采用hibernate的物理分页,每次只是取一页。从客户端传进来的是第几页和每页多少条记录,要首先查询符合记录的总记录数,
再根据总记录数和当前页,每页记录数可以算出要取的是数据库中的第几条记录。2次查询不可避免了。

单元测试如下:


java 代码

 

  1. public
     final
     void
     testFindAllRole() {  

  2.   

  3.             logger.debug("testFindAllRole"
    );  

  4.   

  5.             long
     l1=System.currentTimeMillis();  

  6.   

  7.             String myaction="roleList.do"
    ;  

  8.   

  9.             String curPageNO = "1"
    ;  

  10.   

  11.             CriteriaQuery cq=new
     CriteriaQuery(Role.class
    ,curPageNO,myaction);  

  12.   

  13.             cq.setPageSize(10
    );  

  14.   

  15.             PageSupport ps=BeanFactory.getInstance().getRightDelegate().findAllRole(cq, state);  

  16.   

  17.             long
     l2=System.currentTimeMillis();  

  18.   

  19.             AppUtils.printCollection(ps.getResultList());    

  20.   

  21.             System.out.println("一共用时为 :  "
    +(l2-l1));            

  22.   

  23.         }  



CriteriaQuery类是对hibernate QBC查询方法的封装,需要的参数是当前操作的实体类,myaction,curPageNO,pageSize,
以便构造出相应的上下翻页的工具条。

在delegate中只是将值向下传:


java 代码

 

  1. public
     PageSupport findAllRole(CriteriaQuery cq, IState state) {  

  2.   

  3.         if
     (DelegateUtil.isNullParam(cq, "CriteriaQuery"
    , state)) {  

  4.   

  5.             return
     null
    ;  

  6.   

  7.         }  

  8.   

  9.         Request req = new
     Request();  

  10.   

  11.         req.setServiceName(ServiceConsts.FindAllRoleProcessor);  

  12.   

  13.         req.setValue("CriteriaQuery"
    , cq);  

  14.   

  15.         try
     {  

  16.   

  17.             Response resp = getDelegate().execute(req);  

  18.   

  19.             DelegateUtil.setIState(state, resp);  

  20.   

  21.             return
     (PageSupport) (resp.getValue("PageSupport"
    ));  

  22.   

  23.         } catch
     (Exception e) {  

  24.   

  25.             DelegateUtil.handleException(e, "findAllRole"
    , state);  

  26.   

  27.         }  

  28.   

  29.         return
     new
     PageSupport();  

  30.   

  31.     } 




在业务逻辑模块command中:

java 代码
 
  1. public  class  FindAllRole extends  Command  
  2. {  
  3.     private  RoleDao dao;  
  4.     public  void  setDao(RoleDao dao) {  
  5.         this .dao = dao;  
  6.     }  
  7.     public  void  execute(Map params, Map response) throws  Exception  
  8.   
  9.     {  
  10.         response.put("PageSupport" , (PageSupport)dao.find((CriteriaQuery) params.get("CriteriaQuery" ),true ));  
  11.     }  
  12. ……  
  13.   
  14. }  
直接就是调用dao的find方法:
   

java 代码

 

  1. public
     PageSupport find(final
     CriteriaQuery cq,final
     boolean
     isOffset) {  

  2.        return
     (PageSupport)getHibernateTemplate().execute(  

  3.                new
     HibernateCallback() {  

  4.                    public
     Object doInHibernate(Session session) throws
     HibernateException, SQLException {  

  5.                        Criteria criteria = cq.getDetachedCriteria().getExecutableCriteria(session);   

  6.                        //得到总行数
      

  7.                        int
     allCounts = ((Integer) criteria.setProjection(Projections.rowCount()).uniqueResult()).intValue();   

  8.                        criteria.setProjection(null
    );//还原  
      

  9.                        int
     curPageNO = PagerUtil.getCurPageNO(cq.getCurPage());// 当前页
      

  10.                        int
     offset = PagerUtil.getOffset(allCounts, curPageNO, cq.getPageSize());  

  11.                        String toolBar = PagerUtil.getBar(cq.getMyaction(),allCounts,curPageNO,cq.getPageSize());  

  12.   

  13.                        if
    (isOffset){  

  14.   

  15.                            criteria.setFirstResult(offset);  

  16.   

  17.                            criteria.setMaxResults(cq.getPageSize());  

  18.   

  19.                        }  

  20.                        return
     new
     PageSupport(criteria.list(),toolBar,offset,curPageNO);  

  21.   

  22.                            }  

  23.                      }  

  24.   

  25.                ,true
    );  

  26.    }  






在后台的整个操作中非常简练,只需要将带上参数的CriteriaQuery传到dao就可以实现。
CriteriaQuery封装了hibernate的DetachedCriteria。

java 代码
 
  1. public  class  CriteriaQuery implements  Serializable{  
  2.     public  CriteriaQuery(){  
  3.         super ();  
  4.     }  
  5.     private  static  final  long  serialVersionUID = -1464383406564081554L;  
  6.     // 初始化list   
  7.     private  String curPage=null  ;  
  8.     private  int  pageSize=10 ;  
  9.     private  String myaction;  
  10.     private  String myform;  
  11.     private  CriterionList criterionList;  
  12.     private  DetachedCriteria detachedCriteria;  
  13.   
  14.     public  CriteriaQuery(Class c) {  
  15.         this .criterionList = new  CriterionList();  
  16.         this .detachedCriteria=DetachedCriteria.forClass(c);  
  17.     }  
  18.     public  CriteriaQuery(Class c,String curPage,String myaction,String myform) {  
  19.         this .myaction=myaction;  
  20.         this .myform=myform;  
  21.         this .curPage=curPage;  
  22.         this .criterionList = new  CriterionList();  
  23.         this .detachedCriteria=DetachedCriteria.forClass(c);  
  24.     }  
  25.     public  CriteriaQuery(Class c,String curPage,String myaction) {  
  26.         this .myaction=myaction;  
  27.         this .curPage=curPage;  
  28.         this .criterionList = new  CriterionList();  
  29.         this .detachedCriteria=DetachedCriteria.forClass(c);  
  30.     }  
  31.     public  CriterionList getCriterionList() {  
  32.         return  criterionList;  
  33.     }  
  34.     public  void  setCriterionList(CriterionList criterionList) {  
  35.         this .criterionList = criterionList;  
  36.     }  
  37.   
  38.     public  String getCurPage() {  
  39.         return  curPage;  
  40.     }  
  41.     public  void  setCurPage(String curPage) {  
  42.         this .curPage = curPage;  
  43.     }  
  44.     public  DetachedCriteria getDetachedCriteria() {  
  45.         return  detachedCriteria;  
  46.     }  
  47.     public  void  setDetachedCriteria(DetachedCriteria detachedCriteria) {  
  48.         this .detachedCriteria = detachedCriteria;  
  49.     }  
  50.     public  void  add(Criterion c) {  
  51.             detachedCriteria.add(c);  
  52.     }  
  53.     public  void  add() {  
  54.         for (int  i=0 ;i
  55.             add(getCriterionList().getParas(i));  
  56.         }  
  57.     }  
  58.     public  void  createAlias(String name){  
  59.         detachedCriteria.createCriteria(name);  
  60.     }  
  61.     public  void  createAlias(String name,String value){  
  62.         detachedCriteria.createCriteria(name,value);  
  63.     }  
  64.     public  Criterion and(CriteriaQuery query, int  source, int  dest) {  
  65.         return  Restrictions.and(query.getCriterionList().getParas(source),query.getCriterionList().getParas(dest));  
  66.     }  
  67.     public  Criterion and(Criterion c,CriteriaQuery query, int  source) {  
  68.         return  Restrictions.and(c, query.getCriterionList().getParas(source));  
  69.     }  
  70.     public  Criterion and(Criterion c1, Criterion c2) {  
  71.         return  Restrictions.and(c1,c2);  
  72.     }  
  73.     public  Criterion or(CriteriaQuery query, int  source, int  dest) {  
  74.         return  Restrictions.or(query.getCriterionList().getParas(source),query.getCriterionList().getParas(dest));  
  75.     }  
  76.       
  77.     public  Criterion or(Criterion c,CriteriaQuery query, int  source) {  
  78.         return  Restrictions.or(c, query.getCriterionList().getParas(source));  
  79.     }  
  80.       
  81.     public  void  or(Criterion c1, Criterion c2) {  
  82.         this .detachedCriteria.add(Restrictions.or(c1,c2));  
  83.     }  
  84.     public  void  addOrder(String ordername,String ordervalue) {  
  85.         // 写入order查询条件   
  86.         if  ("asc" .equals(ordername)) {  
  87.             detachedCriteria.addOrder(Order.asc(ordervalue));  
  88.         } else  {  
  89.             detachedCriteria.addOrder(Order.desc(ordervalue));  
  90.         }  
  91.     }  
  92.     public  void  eq(String keyname,Object keyvalue){  
  93.         criterionList.addPara(Restrictions.eq(keyname, keyvalue));  
  94.     }  
  95.     public  void  notEq(String keyname,Object keyvalue){  
  96.         criterionList.addPara(Restrictions.or(Restrictions.gt(keyname, keyvalue),Restrictions.lt(keyname, keyvalue)));  
  97.     }  
  98.     public  void  like(String keyname,Object keyvalue){  
  99.         criterionList.addPara(Restrictions.like(keyname, keyvalue));  
  100.     }  
  101.     public  void  gt(String keyname,Object keyvalue){  
  102.         criterionList.addPara(Restrictions.gt(keyname, keyvalue));  
  103.     }  
  104.     public  void  lt(String keyname,Object keyvalue){  
  105.         criterionList.addPara(Restrictions.lt(keyname, keyvalue));  
  106.     }  
  107.     public  void  le(String keyname,Object keyvalue){  
  108.         criterionList.addPara(Restrictions.le(keyname, keyvalue));  
  109.     }  
  110.     public  void  ge(String keyname,Object keyvalue){  
  111.         criterionList.addPara(Restrictions.ge(keyname, keyvalue));  
  112.     }  
  113.     public  void  ilike(String keyname,Object[] keyvalue){  
  114.         criterionList.addPara(Restrictions.in(keyname, keyvalue));  
  115.     }  
  116.     public  void  between(String keyname,Object keyvalue1,Object keyvalue2) {  
  117.         Criterion c=null ;// 写入between查询条件   
  118.         if  (!AppUtils.isBlank(keyvalue1) && !AppUtils.isBlank(keyvalue2)) {  
  119.             c=Restrictions.between(keyname, keyvalue1, keyvalue2);  
  120.         } else  if  (!AppUtils.isBlank(keyvalue1)) {  
  121.             c=Restrictions.ge(keyname, keyvalue1);  
  122.         } else  if  (!AppUtils.isBlank(keyvalue2)) {  
  123.             c=Restrictions.le(keyname, keyvalue2);  
  124.         }  
  125.         criterionList.add(c);  
  126.     }  
  127.     public  int  getPageSize() {  
  128.         return  pageSize;  
  129.     }  
  130.     public  void  setPageSize(int  pageSize) {  
  131.         this .pageSize = pageSize;  
  132.     }  
  133.     public  String getMyaction() {  
  134.         return  myaction;  
  135.     }  
  136.     public  void  setMyaction(String myaction) {  
  137.         this .myaction = myaction;  
  138.     }  
  139.     public  String getMyform() {  
  140.         return  myform;  
  141.     }  
  142.     public  void  setMyform(String myform) {  
  143.         this .myform = myform;  
  144.     }  



另外需要一些辅助类的支持:

例如PageSupport  封装了返回的数据和工具条。


java 代码

 

  1. public
     class
     PageSupport  implements
     Serializable{  

  2.     private
     int
     curPageNO;  

  3.     private
     int
     offset;  

  4.     private
     String toolBar;  

  5.     private
     List resultList=null
    ;  

  6.   

  7.     public
     PageSupport() {  

  8.   

  9.     }  

  10.     public
     PageSupport(List resultList,String toolBar,int
     offset,int
     curPageNO) {  

  11.         this
    .curPageNO=curPageNO;  

  12.         this
    .offset=offset;  

  13.         this
    .toolBar=toolBar;  

  14.         this
    .resultList=resultList;  

  15.     }  

  16.     public
     List getResultList() {  

  17.         return
     resultList;  

  18.     }  

  19.   

  20.     public
     void
     setResultList(List resultList) {  

  21.         this
    .resultList = resultList;  

  22.     }  

  23.   

  24.     public
     String getToolBar() {  

  25.         return
     toolBar;  

  26.     } 






CriterionList封装了Hibernate的参数:

java 代码
 
  1. /**  
  2.  * 封装了ArrayList,装的是Criterion  
  3.  */   
  4. public  class  CriterionList extends  ArrayList {  
  5.     public  final  Criterion getParas(final  int  index) {  
  6.         return  (Criterion) super .get(index);  
  7.     }  
  8.     public  final  void  addPara(final  int  index, final  Criterion p) {  
  9.         super .add(index, p);  
  10.     }  
  11.     public  final  void  addPara(final  Criterion p) {  
  12.         super .add(p);  
  13.     }  
  14.     public  final  int  indexofPara(final  Criterion p) {  
  15.         return  super .indexOf(p);  
  16.     }  
  17.     public  final  void  removePara(final  int  index) {  
  18.         super .remove(index);  
  19.     }  
  20. }  

PagerUtil用于将客户端的页码和每页多少个记录算出应该取数据库中的记录的位置,再由hibernate构造出一个三层的sql语句。
java 代码
 
  1. public  class  PagerUtil {  
  2.     /**  
  3.      *   
  4.      * @param allCounts 总记录数  
  5.      * @param curPageNO   
  6.      * @param pageSize  每页显示的记录数目  
  7.      * @return  
  8.      */   
  9.     public  static  String  getBar(String action,String form,int  allCounts,int  curPageNO, int  pageSize){  
  10.         Pager pager = null ;  
  11.             try  {  
  12.                 if  (curPageNO<1 ) curPageNO=1 ;  
  13.                 if  (curPageNO> (int ) Math.ceil((double ) allCounts / pageSize))   
  14.                     curPageNO =(int ) Math.ceil((double ) allCounts / pageSize);  
  15.                 //得到offset   
  16.                 int  offset = (curPageNO-1 )*pageSize;//从第几条开始取值   
  17.                  //生成工具条   
  18.                  pager=new  Pager(allCounts,offset,pageSize);  
  19.                  pager.setCurPageNO(curPageNO);//设置当前的页码   
  20.             } catch  (Exception e) {  
  21.                 System.out.println("生成工具条出错!" );  
  22.           }  
  23.          return  pager.getToolBar(action,form);  
  24.     }  
  25.       
  26.     public  static  String  getBar(String url,int  allCounts,int  curPageNO, int  pageSize){  
  27.         Pager pager = null ;  
  28.             try  {  
  29.                 if  (curPageNO<1 ) curPageNO=1 ;  
  30.                 if  (curPageNO> (int ) Math.ceil((double ) allCounts / pageSize))   
  31.                     curPageNO =(int ) Math.ceil((double ) allCounts / pageSize);  
  32.                 //得到offset   
  33.                 int  offset = (curPageNO-1 )*pageSize;//从第几条开始取值   
  34.                  //生成工具条   
  35.                  pager=new  Pager(allCounts,offset,pageSize);  
  36.                  pager.setCurPageNO(curPageNO);//设置当前的页码   
  37.             } catch  (Exception e) {  
  38.                 System.out.println("生成工具条出错!" );  
  39.           }  
  40.          return  pager.getToolBar(url);  
  41.     }  
  42.       
  43.     public  static  int  getOffset(int  rowCounts,int  curPageNO, int  pageSize){  
  44.         int  offset=0 ;  
  45.             try  {  
  46.                 //得到第几页   
  47.                 if  (curPageNO<1 ) curPageNO=1 ;  
  48.                 if  (curPageNO> (int ) Math.ceil((double ) rowCounts / pageSize))   
  49.                     curPageNO =(int ) Math.ceil((double ) rowCounts / pageSize);  
  50.                 //得到offset   
  51.                   offset = (curPageNO-1 )*pageSize;  
  52.             } catch  (Exception e) {  
  53.                 System.out.println("getOffset出错!" );  
  54.             }    
  55.        return  offset;  
  56.     }  
  57.       
  58.     public  static  int  getCurPageNO(String curPage){  
  59.             int  curPageNO;  
  60.              if  (curPage==null ||"" .equals(curPage.trim())) {  
  61.                  curPageNO=1 ;//第一次处于第一页   
  62.               } else  {  
  63.                   try  {  
  64.                       curPageNO = Integer.parseInt(curPage);//得到当前页   
  65.                 } catch  (Exception e) {  
  66.                     curPageNO=1 ;  
  67.                 }  
  68.               }  
  69.              return  curPageNO;  
  70.         }  
  71. }

strutsAction 中:

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

采用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 流程开始
  3. <-- FindAllRoleProcessor  
  4.  INFO [14 :50 :53 ] (SequenceProcessor.java:doActivities:32 ) - 活动 : FindAllRole  
  5. Hibernate: select count(*) as y0_ from t_role this_ where ((this_.name like ? and this_.enabled=?)
  6. or this_.role_type=?) order by this_.id asc  
  7. //首先查出总的记录数   
  8. Hibernate: select this_.id as id0_, this_.name as name3_0_, this_.role_type as role3_3_0_,
  9. this_.enabled as enabled3_0_, this_.note as note3_0_ from t_role this_ where ((this_.name like ?
  10. and this_.enabled=?) or this_.role_type=?) order by this_.id asc limit ?  
  11.  INFO [14 :50 :53 ] (SequenceProcessor.java:doActivities:69 ) -  SequenceProcessor 流程结束 -->  
  12. list size:  1   
  13. 一共用时为 :  531   
  14. id = 1   
  15. -----------------  
  16. 首页 上一页 下一页 尾页  共1 条记录  转到"location='xxx.do?&curPageNO='+this.options[this.selectedIndex].value" >1 ' selected>第1
来自:http://onecan.javaeye.com/blog/93396 good
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值