业务要求:Hibernate Criteria分页查询出所有除角色为管理员以外的所有用户
public Pagination findUserList(final Pagination pagination , final String param)
{
final List result = this.getHibernateTemplate().executeFind(
new HibernateCallback() {
public Object doInHibernate(final Session session)
throws HibernateException, SQLException {
Criteria criteria = DetachedCriteria.forClass(
AmUserRole.class).getExecutableCriteria(
session);
Criteria userCriteria = criteria.createCriteria("amUser");
Criteria roleCriteria = criteria.createCriteria("amRole");
//去除角色为管理员的用户
roleCriteria.add(Restrictions.not(Expression.in(
"roleId",new Long[]{0L})));
userCriteria.add(Restrictions.like("name", "%"+param+"%"));
//userCriteria.add(
//Restrictions.like("username",
//param,MatchMode.ANYWHERE);
//查询去除重复行后的总记录数
userCriteria.setProjection(Projections.countDistinct("userId"));
//hibernate3.0以后返回的是Long型
Integer totalCount = (Integer) criteria.uniqueResult();
ProjectionList projectionList = Projections.projectionList();
//决定返回的结果
projectionList.add(Projections.property("amUser"));
criteria.setProjection(Projections.distinct(projectionList));
userCriteria.addOrder(Order.asc("name"));
//判断是否需要分页
if(pagination.getPageSize() <= 0)
{
return criteria.list();
}else{
if(0 == pagination.getItemCount())
{
System.out.println("totalCount---->"+totalCount);
pagination.setItemCount(totalCount);
}
int pageSize = pagination.getPageSize();
int pageNo = pagination.getCurrentPage();
int startIndex = pageSize * (pageNo - 1);
criteria.setFirstResult(startIndex);
criteria.setMaxResults(pageSize);
pagination.setPageSize(pageSize);
pagination.setCurrentPage(pageNo);
return criteria.list();
}
}
});
pagination.setItemList(result);
return pagination;
}