`
hgj0521
  • 浏览: 5634 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
社区版块
存档分类
最新评论

Hibernate分页查询

    博客分类:
  • java
阅读更多
查询往往都是模糊查询的,hibernate对此做了很好的封装,首先介绍一下几个常用的类1.Criteria 2.Criterion 3.Order
数据访问层
public Collection<Information> findInformationByCriteria(
final Collection<Criterion> criterions, final int firstResult, final int maxResults,
final Collection<Order> orders) {
return (Collection<Information>) this.getHibernateTemplate().execute(
new HibernateCallback() {
@Override
public Object doInHibernate(Session arg0)
throws HibernateException, SQLException {
Criteria criteria = arg0
.createCriteria(Information.class);
if (null != criterions) {
for (Criterion criterion : criterions) {
if (null != criterion) {
criteria.add(criterion);
}
}
}

if (0 < maxResults) {
criteria.setMaxResults(maxResults);
}

criteria.setFirstResult(firstResult);

if (null != orders) {
for (Order order : orders) {
if (null != order) {
criteria.addOrder(order);
}
}
}
return criteria.list();
}
});

}
Criteria 是由session对象创建,参数是实体对象.class,常用的方法有:
list()返回对象集合;criteria.setMaxResults(int a)每页显示条数最大条数;criteria.setFirstResult(int b)起始条数;
criteria.add()添加查询条件;Criterion 对象或 Order对象
下面是组织查询条件,也是由仓库来完成
private Collection<Criterion> getCriterias(int status,int infoType, String keyWords,
Category category) {
Collection<Criterion> criterions = new ArrayList<Criterion>();
   if (0!=infoType) {
criterions.add(Property.forName("infoType").eq(infoType));
}


if (0 != status) {
criterions.add(Property.forName("status").eq(status));
} else {
criterions.add(Property.forName("status").eq(
ManagementConstants.NORMAL));
}
if (!StringUtils.isBlank(keyWords)) {
criterions.add(Property.forName("infoClass").eq(category));
}
if (!StringUtils.isBlank(keyWords)) {
criterions.add(Restrictions.or(Restrictions.like("title", keyWords,
MatchMode.ANYWHERE), Restrictions.like("content", keyWords,
MatchMode.ANYWHERE)));
}
return criterions;
}



/**
* 排序规则
*/
private List<Order> getOrders(String orderField, String orderRule) {
List<Order> orders = new ArrayList<Order>();
if (!StringUtil.isStringNull(orderField)
&& "DESC".equals(orderRule.toUpperCase())) {
orders.add(Order.desc(orderField));
}


if (!StringUtil.isStringNull(orderField)
&& "ASC".equals(orderRule.toUpperCase())) {
orders.add(Order.asc(orderField));

}

return orders;
}

Criterion 查询条件 criterions是Criterion的对象集合
criterions.add(Property.forName("status").eq( ManagementConstants.NORMAL));
Restrictions.like("content", keyWords,
MatchMode.ANYWHERE)));
eq是相等的意思 like是字符匹配,后面的参数MatchMode.ANYWHERE是任意位置匹配,还有前匹配START后匹配END
                                    
      =                     eq()                  等于
      <>                   not(Exprission.eq())  不等于
      >                     gt()                  大于
      >=                   ge()                  大于等于
      <                     lt()                  小于
      <=                   le()                  小于等于
      is null             isnull()              等于空值
      is not null      isNotNull()               非空值
      like                 like()                字符串模式匹配
      and                and()                   逻辑与
      and                conjunction()           逻辑与
      or                   or()                  逻辑或
      or                   disjunction()         逻辑或
      not                  not()                 逻辑非
      in()                 in()                  等于列表中的某一个值

   Order 是排列顺序 orders 是Order对象的集合
orders.add(Order.desc(orderField));这是按照属性orderField降序排列
最后是仓库里的方法
/**
* 根据标题和资讯分类查询
*
* @return
*/
public Collection<Information> findInformationByCritera(int status,
int infoType, String keyWords, Category category, int page, int maxResults,
String orderField, String orderRule) {

return informationDao.findInformationByCriteria(getCriterias(status,
infoType, keyWords, category), (page - 1) * maxResults, maxResults,
getOrders(orderField, orderRule));
}
0
1
分享到:
评论

相关推荐

    Hibernate分页查询小结

    Hibernate分页查询小结

    Hibernate分页查询原理解读

    #### 三、Hibernate分页查询实现原理 ##### 3.1 使用SQL LIMIT实现分页 对于支持LIMIT关键字的数据库(例如MySQL),Hibernate会通过特定的方言(Dialect)来生成包含LIMIT关键字的SQL语句。具体实现如下: ```...

    hibernate分页查询 数据库连接

    此外,优化查询,避免N+1查询问题,合理设计实体关系,都能有效提升Hibernate分页查询的效率。 总结起来,Hibernate的分页查询和数据库连接管理是其强大功能的重要组成部分。正确理解和使用这些特性,能够帮助...

    hibernate分页查询

    让我们深入探讨Hibernate分页查询的相关知识点。 一、Hibernate分页原理 Hibernate分页查询基于SQL的LIMIT和OFFSET子句,通过Session的createQuery或createSQLQuery方法创建查询,并设置FirstResult和MaxResults...

    Hibernate 分页查询效果

    本篇主要围绕"Hibernate分页查询效果"这一主题,深入探讨如何利用Hibernate框架实现高效、便捷的分页功能。 首先,Hibernate是一个优秀的Java持久化框架,它提供了ORM(对象关系映射)解决方案,使得开发者可以使用...

    使用hibernate分页查询

    1. **配置Hibernate分页**: 在Hibernate中,我们通常使用`Criteria`或`Query` API进行分页查询。`Criteria`提供了一种更面向对象的方式来执行SQL查询,而`Query` API则对应于原生的SQL语句。在这些API中,我们可以...

    struts2+spring+hibernate分页查询

    **Hibernate分页查询** Hibernate支持两种分页方式:Criteria API和HQL(Hibernate Query Language)。Criteria API可以通过DetachedCriteria对象创建查询条件,然后调用setFirstResult和setMaxResults方法实现分页...

    webwork2.2.7+spring+hibernate分页查询

    ### WebWork 2.2.7 + Spring + Hibernate 分页查询技术详解 #### 一、项目背景及架构 本项目采用WebWork 2.2.7框架结合Spring和Hibernate技术实现了一个基本的用户数据分页查询功能。主要目标是根据用户输入的...

    hibernate分页查询功能

    本示例中,我们看到如何利用Struts2、Spring和Hibernate这三个流行框架来实现分页查询功能。下面我们将详细讲解这个实现过程。 1. **UserDao接口**: UserDao接口定义了分页查询的方法,通过`getUser(int offset, ...

    STRUTS2+HIBERNATE详细的分页实现代码详细的分页实现代码

    在这个类中,我们可以通过编写Hibernate HQL或SQL查询语句来实现分页查询。 4. **Struts2 Action** 在Action类中,我们需要处理来自用户的请求参数,如当前页码和每页显示记录数等,并调用DAO中的分页查询方法获取...

    hibernate实现分页查询

    ### Hibernate 实现分页查询详解 #### 一、引言 在进行数据库操作时,为了提高用户体验和系统性能,分页查询是一项非常重要的技术。Hibernate作为Java领域内一个优秀的对象关系映射(ORM)框架,提供了强大的数据...

    springmvc+hibernate+spring maven案例(包含分页查询)

    这个压缩包提供的案例是这三个框架的整合使用,涵盖了基本的CRUD(创建、读取、更新、删除)操作,并且包含了分页查询的功能。下面将详细讲解这些知识点。 1. **Spring MVC** - Spring MVC是Spring框架的一个模块...

    基于spring+hibernate的组合查询+分页组件

    在Hibernate中,我们可以通过设置FirstResult(对应于SQL的LIMIT开始位置)和MaxResults(对应于SQL的LIMIT大小)参数来实现分页查询。 以下是一个简单的示例,展示如何在Spring和Hibernate中实现组合查询和分页: ...

    Struts和Hibernate分页及查询

    在分页查询中,Hibernate提供了一种称为HQL(Hibernate Query Language)的SQL方言,可以方便地实现复杂的查询,包括分页查询。此外,Hibernate还支持Criteria查询,这是一种更加面向对象的查询方式,同样可以实现...

    JQuery,ajax,hibernate+spring,分页查询.rar

    至于“Hibernate分页查询原理解读”,这可能是一个深入解析Hibernate分页机制的文档,包括`FirstResult`和`MaxResults`参数的使用,以及如何有效地缓存查询结果以提高性能。 综合来看,这个压缩包包含了一系列关于...

    hibernate分页Hibernate 分页的设计和编码

    使用Hibernate进行分页查询时,可以通过设置`FirstResult`和`MaxResults`来限制查询结果集的范围。 ```java Query queryObject = getSession().createQuery("FROM User"); queryObject.setFirstResult((currentPage...

    基于hibernate 通用查询框架,包含查询、分页列表 功能

    通用查询页面中的查询项、查询出的分页列表都是自动生成的。开发简便、快速,附件中是一套完整的demo和使用说明 支持全部Hql语法格式 Awake 后续功能扩展 1.XML格式数据输出,保证了ajax用户也可以使用Awake框架...

    struts2+spring+hibernate分页显示

    4. **Hibernate分页查询**:在DAO中,使用Session的createQuery或createCriteria方法,结合PageHelper(或其他分页插件)进行分页查询。PageHelper会自动计算总页数,并返回当前页的数据和总记录数。 5. **返回结果...

    hibernate 模糊查询 分页

    接下来,我们讨论分页查询。在处理大量数据时,一次性加载所有结果可能会导致性能问题。因此,通常会采用分页的方式来获取数据。在Hibernate中,我们可以使用`Criteria`或`Query`对象的`setFirstResult()`和`...

Global site tag (gtag.js) - Google Analytics