前阵子写个DAO层的查询列表,出了点小问题,记录一下
针对当前的程序,为了使各个业务层都能用此DAO查询,所以,查询条件是可变的
我在Action中封装查询条件为Map<String,Object>类型的,String为属性,Object为对应的值
查询时开始用的是Query,后来还是觉得Criteria更加方便直观
- public PageResult<T> pageList(Map<String, Object> maps, Class<T> entity,
- int nowPage, int pageSize) throws Exception {
- // TODO Auto-generated method stub
- //总记录数
- int totalNum = this.getHibernateTemplate().find("from "+entity.getSimpleName()).size();
- //总页数
- int totalPage = totalNum%pageSize==0?totalNum/pageSize:totalNum/pageSize+1;
- //当前页列表
- List<T> list = null;
- Session session = this.getSession();
- Criteria c = session.createCriteria(entity);
- /**
- * 如果Map为null,那么为查询所有,如果不为空,那么通过for循环,将Map拼接查询条件
- * 开始用的Query,后来还是觉得Criteria更加方便直观
- */
- if(maps!=null && maps.keySet().size()>0){
- for(String propertyName:maps.keySet()){
- Object value = maps.get(propertyName);
- c.add(Restrictions.eq(propertyName, value));
- }
- }
- //设置当前页的第一条记录
- c.setFirstResult((nowPage-1)*pageSize);
- //每页显示几条记录
- c.setMaxResults(pageSize);
- list = c.list();
- session.close();
- //封装pagebean
- PageResult<T> pagebean = new PageResult<T>();
- pagebean.setList(list);
- pagebean.setNowPage(nowPage);
- pagebean.setPageSize(pageSize);
- pagebean.setTotalNum(totalNum);
- pagebean.setTotalPage(totalPage);
- return pagebean;
- }
转载于:https://blog.51cto.com/zynet/757571