前阵子写个DAO层的查询列表,出了点小问题,记录一下

针对当前的程序,为了使各个业务层都能用此DAO查询,所以,查询条件是可变的

我在Action中封装查询条件为Map<String,Object>类型的,String为属性,Object为对应的值

查询时开始用的是Query,后来还是觉得Criteria更加方便直观

 
  
  1. public PageResult<T> pageList(Map<String, Object> maps, Class<T> entity,  
  2.         int nowPage, int pageSize) throws Exception {  
  3.     // TODO Auto-generated method stub  
  4.     //总记录数  
  5.     int totalNum = this.getHibernateTemplate().find("from "+entity.getSimpleName()).size();  
  6.     //总页数  
  7.     int totalPage = totalNum%pageSize==0?totalNum/pageSize:totalNum/pageSize+1;  
  8.     //当前页列表  
  9.     List<T> list = null;  
  10.     Session session = this.getSession();  
  11.     Criteria c = session.createCriteria(entity);  
  12.     /**  
  13.      * 如果Map为null,那么为查询所有,如果不为空,那么通过for循环,将Map拼接查询条件  
  14.      * 开始用的Query,后来还是觉得Criteria更加方便直观  
  15.      */ 
  16.     if(maps!=null && maps.keySet().size()>0){  
  17.         for(String propertyName:maps.keySet()){  
  18.             Object value = maps.get(propertyName);  
  19.             c.add(Restrictions.eq(propertyName, value));  
  20.         }  
  21.     }  
  22.     //设置当前页的第一条记录  
  23.     c.setFirstResult((nowPage-1)*pageSize);  
  24.     //每页显示几条记录  
  25.     c.setMaxResults(pageSize);  
  26.     list = c.list();  
  27.     session.close();  
  28.     //封装pagebean  
  29.     PageResult<T> pagebean = new PageResult<T>();  
  30.     pagebean.setList(list);  
  31.     pagebean.setNowPage(nowPage);  
  32.     pagebean.setPageSize(pageSize);  
  33.     pagebean.setTotalNum(totalNum);  
  34.     pagebean.setTotalPage(totalPage);  
  35.     return pagebean;