业务要求:查询出所有除角色为管理员以外的所有用户
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;
}
这样返回的结果就是用户表所映射的用户对象
分享到:
相关推荐
分页**:在SSH框架中,实现分页通常需要结合Spring的Pageable接口和Hibernate的Criteria API或HQL。通过设置每页大小和当前页数,查询出对应的数据范围。在JSP页面上,可以使用标签库如DisplayTag或JSTL来展示分页...
Hibernate提供了Session接口,用于执行CRUD(创建、读取、更新、删除)操作,并且支持HQL(Hibernate查询语言)和SQL查询,方便数据检索。 分页在大数据量的应用中非常常见,它能提高用户体验并减少服务器负载。在...
在分页场景下,我们可以使用Criteria或HQL(Hibernate Query Language)查询来实现,结合Criteria的setFirstResult和setMaxResults方法来实现分页。在CRUD操作中,Hibernate提供了一对一、一对多、多对多等关系的...
在分页功能中,Hibernate提供 Criteria 查询或HQL(Hibernate Query Language)来实现分页查询,可以有效地获取指定页的数据,并控制查询性能,避免大数据量一次性加载。 购物车功能的实现通常涉及以下步骤: 1. ...
Hibernate的二级缓存能存储已查询过的数据,避免重复查询数据库。开启并配置二级缓存(如EhCache或Infinispan),可以显著提升性能。记得只对不变或更新频率低的数据使用缓存,避免脏数据问题。 3. **HQL与...
在文档中,作者提供了一个名为`Find`的方法,该方法接受一个谓词表达式`criteria`用于定义查询条件,`pageIndex`和`pageSize`用于分页,以及`asc`和`desc`数组来指定排序方式。这种方法可以灵活地处理各种分页需求...
2. **条件查询**:通过传入HQL(Hibernate Query Language)或者Criteria API来实现动态查询。例如`public List<T> findByExample(T exampleEntity)`,可以基于一个实例对象的属性来构建查询条件。 3. **分页查询**...
3. **分页查询**:在大型项目中,通常需要实现分页功能,我们可以提供`List<T> findPage(int pageSize, int currentPage, Criteria criteria)`方法,支持按条件分页查询。 4. **排序**:允许用户自定义排序规则,...
- **解决方案**: 在Hibernate的Criteria API中,可以通过调用`setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY)`方法来去除查询结果中的重复项。这会确保查询结果只包含唯一的根实体对象。 #### 二、HTTP与...
Hibernate 提供了 `Criteria.DISTINCT_ROOT_ENTITY` 结果转换器,用于在查询时去除结果集中的重复实体。在 Criteria 查询中,添加 `dc.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);` 可以确保返回的实体...
项目中实现了分页功能,可能通过在Hibernate查询中添加限制条件(如`setFirstResult()`和`setMaxResults()`)或者使用`Criteria` API的`setFirstResult()`和`setMaxResults()`来实现。这使得用户可以按需加载数据,...
- **分页查询**:使用Criteria API或HQL实现分页查询,结合Page对象存储查询结果和分页信息。 3. **事务管理** - 为了保证数据的一致性,通常需要在通用DAO中处理事务。可以使用Spring的TransactionTemplate或者...
Query接口提供HQL查询,可执行参数化查询、分页查询等。Criteria API提供面向对象的查询方式,更易于动态构造查询条件。 7. Criteria API详解: Criteria查询通过Criteria、DetachedCriteria等类构建,可设置限制...
这里通过两个嵌套的`SELECT`语句先找到所有重复记录的ID,再利用`MIN(rowid)`来确定每个组中最小的`rowid`,从而确保只删除重复记录。 #### 4. 日志框架Log4j配置 **题目:** Log4j的配置方式有哪些? **答案:** ...
Hibernate中的Criteria API提供了去除查询结果重复项的方法,`dc.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);`这行代码会确保返回的结果集中不会有重复的根实体对象。 2. **HTTP与SMTP协议及其端口**:...
`rownum`是根据查询结果分配的逻辑编号,而`rowid`则是记录的物理位置,适用于快速定位和删除重复记录。 在面试中,了解这些基础题并能灵活运用是非常重要的,尤其是对于初入行业的开发者。面试官可能会通过这些...
1. **Hibernate离线查询去除重复项**:在Hibernate中,使用Criteria API时,可以设置ResultTransformer为`Criteria.DISTINCT_ROOT_ENTITY`来去除查询结果中的重复实体。 2. **HTTP与SMTP协议及端口**:HTTP是用于...
Hibernate中的Criteria查询可以通过设置ResultTransformer为DISTINCT_ROOT_ENTITY来去除查询结果中的重复实体。`dc.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);` 这一行代码的作用是确保返回的实体结果...
Hibernate 提供了一个方便的方法来去除查询结果中的重复实体,即 `dc.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);` 这行代码会确保返回的实体结果是唯一的,避免了由于关联查询导致的重复数据。 2. **...