Hibernate 使用 Criteria 分页
2014-01-09 15:00
375 查看
public Page findListByPage(HashMap<String, String> filter, String sortWay) { Page page = null; List list = new ArrayList(); Session session = getHibernateTemplate().getSessionFactory().openSession(); Transaction tran = session.beginTransaction(); try { Criteria query = session.createCriteria(DwDataExchangeStore.class); if (!filter.isEmpty()) { for (Iterator i = filter.keySet().iterator(); i.hasNext(); ) { String paramName = (String)i.next(); if ((paramName.equalsIgnoreCase("id")) || (paramName.equalsIgnoreCase("dataType"))) { query.add(Restrictions.eq(paramName, filter.get(paramName))); } else if (paramName.equalsIgnoreCase("valid")) { query.add(Restrictions.eq(paramName, Long.valueOf(Long.parseLong((String)filter.get(paramName))))); } else if (paramName.contains("Time")) { SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); String fieldName = paramName.substring(0, paramName.length() - 1); String sDate = (String)filter.get(paramName); boolean isStartTime = paramName.endsWith("s"); if (isStartTime) query.add(Restrictions.ge(fieldName, dateFormat.parse(sDate + " 00:00:00"))); else { query.add(Restrictions.le(fieldName, dateFormat.parse(sDate + " 23:59:59"))); } } else if (paramName.contains("Date")) { String fieldName = paramName.substring(0, paramName.length() - 1); String sDate = (String)filter.get(paramName); boolean isStartTime = paramName.endsWith("s"); if (isStartTime) query.add(Restrictions.ge(fieldName, sDate)); else { query.add(Restrictions.le(fieldName, sDate)); } } else if ((!paramName.equalsIgnoreCase("pageNo")) && (!paramName.equalsIgnoreCase("pageSize"))) { query.add(Restrictions.like(paramName, (String)filter.get(paramName), MatchMode.ANYWHERE)); } } } if (sortWay.equalsIgnoreCase("asc")) query.addOrder(Order.asc("createTime")); else { query.addOrder(Order.desc("createTime")); } int totalCount = ((Integer)query.setProjection(Projections.rowCount()).uniqueResult()).intValue(); query.setProjection(null); query.setResultTransformer(CriteriaSpecification.ROOT_ENTITY); int pageNo = 0; int pageSize = 0; if ((filter.get("pageNo") != null) && (Integer.parseInt((String)filter.get("pageNo")) > 0)) { pageNo = Integer.parseInt((String)filter.get("pageNo")); pageSize = filter.get("pageSize") == null ? 10 : Integer.parseInt((String)filter.get("pageSize")); query.setFirstResult(pageSize * (pageNo - 1)); query.setMaxResults(pageSize); } list = query.list(); if (pageNo == 0) page = new Page(0, pageSize, totalCount, pageSize, list); else { page = new Page(pageSize * (pageNo - 1), pageSize, totalCount, pageSize, list); } page.setResult(list); tran.commit(); } catch (Exception e) { tran.rollback(); e.printStackTrace(); } finally { session.flush(); session.close(); } return page; }
相关文章推荐
- 使用hibernate的criteria分页查询后得到数组对象
- 使用Hibernate criteria进行分页查询时,如何实现一次查询取得总记录数和分页后结果集
- Hibernate里面如何使用DetachedCriteriaCriteria 实现多条件分页查询
- Spring3.x_Struts2.x_Hibernate3.x整合之分页pager-taglib的简单使用
- hibernate 中 Criteria 的使用介绍
- Hibernate中使用Criteria查询及注解——(hibernate.cfg.xml)
- 关于Hibernate中fatch=eager的bag集合(一个java List)使用Criteria查询出现重复记录的问题
- NHibernate使用Criteria分页显示并返回记录总数 【转】
- Hibernate使用原生的动态sql实现带条件的查询分页功能
- hibernate 中 Criteria 的使用介绍
- 使用hibernate和struts2实现分页功能
- hibernate 中 Criteria 的使用介绍
- Hibernate3中DetachedCriteria的使用
- 加强hibernate的criteria查询中的使用Example查询的
- 对于Hibernate3中的DetacheCriteria的使用
- Hibernate 配置使用线程报错org.hibernate.HibernateException: createCriteria is not valid without active trans
- Hibernate3中DetachedCriteria的使用
- 用Hibernate中的Criteria实现后台分页方法
- Hibernate createCriteria 使用
- 求助Hibernate问题(我使用Criteria 查询数据库表时,当客户端调用到第3次就出现问题 )