`

Hibernate查询条件封装对象Expression介绍

阅读更多
Criteria Query是Hibernate提供的将SQL语句对象化表示的一种方法。当我们使用JDBC方式查询数据时会这样写: 
select NAME FROM EMPLOYEE where ID = '001' 

使用Hibernate的Criteria Query方式查询时,就可以使用我们已经习惯了的面向对象的方式。如下:
 

 
程序代码
import net.sf.hibernate.Criteria; 
import net.sf.hibernate.expression.Expression; 
... 

Criteria criteria = session.createCriteria(Employee.class); 
criteria.add(Expression.eq("id", "001")); 
ArrayList list = criteria.list(); 
... 


  其中Expression对象是where条件的封装,提供了查询限定机制,现在介绍一下他的具体使用:
 
 Expression的方法描述  
Expression.eq:对应SQL条件中的"field = value"。如:Expression.eq("id","001") 
Expression.allEq:参数为一个Map对象,其中包含了多个属性和值对应关系。相当于多个Expression.eq关系,多个条件。如: 
程序代码
map.put("id", "001"); 
map.put("name", "hiswing"); 
Expression.allEq(map); 


Expression.gt:对应SQL条件中的"field > value "。如:Expression.gt("salary", new Integer(5000)) 
Expression.ge:对应SQL条件中的"field >= value"。 
Expression.lt:对应SQL条件中的"field < value"。 
Expression.le:对应SQL条件中的"field <= value"。 
Expression.between:对应SQL条件中的"between"。 
Expression.like:对应SQL条件中的"field like value"。 
Expression.in:对应SQL条件中的"field in …"。 
Expression.eqProperty:用于比较两个属性之间的值,对应SQL条件中的"field = field"。如:Expression.eqProperty("Employee.id", "Group.eid"); 
Expression.gtProperty:用于比较两个属性之间的值,对应SQL条件中的"field > field"。 
Expression.geProperty:用于比较两个属性之间的值,对应SQL条件中的"field >= field"。 
Expression.ltProperty:用于比较两个属性之间的值,对应SQL条件中的"field < field"。 
Expression.leProperty:用于比较两个属性之间的值,对应SQL条件中的"field <= field"。 
Expression.and:and关系组合。
 
如: 
Expression.and( 
  Expression.eq("name","hiswing"), 
  Expression.eq("sex", new Integer(1)) 


Expression.or:or关系组合。(使用方法同Expression.and) 
Expression.sql:我们可以通过这个方法直接通过SQL语句限定查询条件。
 

   注:在使用Criteria时,Expression中的KEY为POJO中的属性 。如Expression.eq("id", "001")中的id为Employee对象中id这个属性,注意大小写
 
 
 

****************************************************************************************
 有很多预制的条件类型(Expression的子类)。有一个特别有用,可以让你直接嵌入SQL。 

List cats = sess.createCriteria(Cat.class)
    .add( Expression.sql("lower($alias.name) like lower(?)", "Fritz%", Hibernate.STRING) )
    .list();
其中的{alias}是一个占位符,它将会被所查询实体的行别名所替代.

************************************************************

分享到:
评论

相关推荐

    使用hibernate封装方法

    标题“使用Hibernate封装方法”暗示我们将讨论如何在项目中通过封装Hibernate操作,以提高代码的复用性和可读性。通常,我们会在DAO(数据访问对象)层进行这些封装,将数据库的CRUD(创建、读取、更新、删除)操作...

    hibernate结构化查询

    本篇文章将深入探讨Hibernate中的Criteria API,特别是其条件封装对象——Expression。 Criteria API 是 Hibernate 提供的一种高级查询接口,它允许开发者创建动态查询。在Hibernate中,`Criteria`对象代表了一个...

    hibernate分页查询功能

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

    hibernate课件

    为了添加特定的查询条件,我们需要使用Criteria的add方法,配合Expression对象来构建复杂的查询表达式。 Expression对象提供了丰富的API来构建各种SQL查询条件。比如,`Expression.eq("name", "Erica")` 表示"WHERE...

    深入浅出Hibernate学习笔记

    Criteria API允许我们将查询条件封装成对象,使得查询更加灵活且易于维护。 Criteria API的使用通常包括以下步骤: 1. 创建Criteria对象:通过Session的createCriteria()方法创建,指定要查询的实体类,例如`...

    spring3 + hibernate3 实现用户的增删改查

    本教程将详细介绍如何利用Spring3和Hibernate3实现用户管理系统的增删改查功能,非常适合初学者入门。 Spring是一个全面的Java企业级应用开发框架,它提供了依赖注入(DI)和面向切面编程(AOP)等核心特性,帮助...

    strut2+hibernate简单例子

    6. **HQL(Hibernate Query Language)**:Hibernate提供了一种面向对象的查询语言HQL,可以更方便地进行数据库查询,避免直接编写SQL语句。 7. **整合Struts2和Hibernate**:在Action类中,我们可以使用...

    JSP+Hibernate博客在线系统

    4. **HQL查询**:Hibernate特有的查询语言,类似于SQL,但更适应面向对象编程。 **三、Struts框架** Struts是基于MVC(Model-View-Controller)设计模式的Web应用框架,用于组织和控制应用程序的业务逻辑。在JSP...

    struts2+hibernate登录注册增删改分页查询

    Struts2的Action类会封装这些操作,然后调用Hibernate的Session方法,如`save()`, `delete()` 和 `update()` 来执行对应的数据库操作。 3. **分页查询**:对于大量用户数据,分页查询是一种有效的展示方式。使用...

    Hibernate+Struts+Spring 实现的通用分页查询

    接着,定义了一个分页查询的接口`IPageModelDao.java`,它声明了一个`queryPage`方法,接收HQL(Hibernate Query Language)查询语句、当前页数和每页记录数作为参数,返回一个`PageModel`对象。这个接口定义了分页...

    关于Struts+Hibernate分页的例子

    然后,Action类通过调用Hibernate的Session对象查询数据库,使用HQL(Hibernate Query Language)或SQL语句,配合Criteria API来实现分页查询。在查询时,需要设置开始索引和每页显示的记录数,这两者可以通过用户的...

    struts+hibernate分页

    2. **Hibernate的Criteria查询**:在持久化层,我们可以利用Hibernate的Criteria API来构建动态的查询条件,包括分页参数。Criteria接口提供了setFirstResult()和setMaxResults()方法来实现分页查询。 3. **数据库...

    Struts+Hibernate分页

    3. **结果集转换**:查询到的数据通常是Hibernate的实体对象列表,需要将其转换为业务对象或视图模型,以便于在JSP中展示。可以创建一个专门的类来封装分页信息,如总记录数、总页数、当前页的记录列表等。 4. **...

    在线留言板(Jsp+Struts+Hibernate)

    3. Hibernate:Hibernate是一个对象关系映射(ORM)框架,能够将Java对象映射到数据库表。尽管描述中提到因为表结构简单,Hibernate的使用可能不太恰当,但在实际应用中,Hibernate简化了数据库操作,减少了与SQL的...

    strut2+hibernate+mysql的实例

    4. DAO(Data Access Object)类:封装了对数据库的操作,通过Hibernate的Session接口实现。 5. Service层类:业务逻辑处理,调用DAO完成具体功能。 6. Action类:Struts2的控制器,接收并处理请求,返回结果给...

    struts1.2+hibernate开发的小项目

    Struts1.2是一个基于MVC(Model-View-Controller)模式的框架,主要用于处理用户请求和控制业务逻辑,而Hibernate则是一个对象关系映射(ORM)工具,用于简化数据库操作,将Java对象与数据库表进行映射,从而减少了...

    struts和hibernate的一个小项目

    此外,它还支持HQL(Hibernate Query Language),这是一种面向对象的查询语言,与SQL类似但更贴近Java对象。 在这个StrutsDemo_CRM项目中,我们可能会看到以下几个关键组成部分: 1. **实体类(Entities)**:...

    Struts2 + Hibernate3 分页程序

    这种方式简单直观,适合于动态构建查询条件。 - `HQL(Hibernate Query Language)`:与SQL类似,但更面向对象,也可以通过`from`语句后的`setFirstResult()`和`setMaxResults()`实现分页。 3. **整合Struts2和...

    struts+hibernate实例(分页)

    Action将接收到的请求参数(如当前页码、每页显示条数)传递给DAO,并将查询结果封装成Model对象,返回给前端。 6. **JSP展示**:在JSP页面上,使用Struts标签库或者EL(Expression Language)表达式来显示数据,并...

Global site tag (gtag.js) - Google Analytics