前陣子寫個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;
- }