您的位置:首页 > 其它

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: