Criteria Query通过面向对象化的设计,将数据查询条件封装为一个对象。简单来讲,Criteria Query可以看作是传统SQL的对象化表示,如:
Java代码
Criteria criteria = session.createCriteria(User.class);
criteria.add(Expression.eq("name","Erica"));
criteria.add(Expression.eq("sex",new Integer(1)));
Criteria 查询表达式
Criteria 本身只是一个查询容器,具体的查询条件需要通过Criteria.add方法添加到Criteria实例中。 如前例所示,Expression 对象具体描述了查询条件。针对SQL 语法,Expression提供了对应的查询限定机制,包括:
Java代码
Expression.eq 对应SQL“field = value”表达式。 如Expression.eq("name","Erica")
Expression.allEq 参数为一个Map对象,其中包含了多个属性-值对应关系。相当于多个Expression.eq关系的叠加。
Expression.gt 对应SQL中的 “field > value ” 表达式
Expression.ge 对应SQL中的 “field >= value” 表达式
Expression.lt 对应SQL中的 “field < value” 表达式
Expression.le 对应SQL中的 “field <= value” 表达式
Expression.between 对应SQL中的 “between” 表达式
如下面的表达式表示年龄(age)位于13到50区间内。
Java代码
Expression.between("age",new Integer(13),new Integer(50));
表达式
Java代码
Expression.in 对应SQL中的 ”field in …” 表达式
Expression.eqProperty 用于比较两个属性之间的值,对应SQL中的“field = field”。 如:
Expression.eqProperty( "TUser.groupID", "TGroup.id" );
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","Erica"), Expression.eq( "sex", new Integer(1) ) );
Expression.or or关系组合。 如:
Expression.or( Expression.eq("name","Erica"), Expression.eq("name","Emma") );
Expression.sql 作为补充,本方法提供了原生SQL语法的支持。我们可以通过这个方法直接通过SQL语句限定查询条件。 下面的代码返回所有名称以“Erica”起始的记录:
Java代码
Expression.sql( “lower({alias}.name) like lower(?)”, "Erica%", Hibernate.STRING );
Expression.sql( “lower({alias}.name) like lower(?)”, "Erica%", Hibernate.STRING );
其中的“{alias}”将由Hibernate在运行期使用当前关联的POJO别名替换。 注意Expression 各方法中的属性名参数(如Express.eq中的第一个参数),这里 所谓属性名是POJO中对应实际库表字段的属性名(大小写敏感),而非库表中的实际字段名称。
Criteria 高级特性
限定返回的记录范围
通过criteria. setFirstResult/setMaxResults 方法可以限制一次查询返回的记录范围:
Java代码
Criteria criteria = session.createCriteria(TUser.class);
//限定查询返回检索结果中,从第一百条结果开始的20条记录
criteria.setFirstResult(100);
criteria.setMaxResults(20);
对查询结果进行排序
//查询所有groupId=2的记录
//并分别按照姓名(顺序)和groupId(逆序)排序
Criteria criteria = session.createCriteria(TUser.class);
criteria.add(Expression.eq("groupId",new Integer(2)));
criteria.addOrder(Order.asc("name"));
criteria.addOrder(Order.desc("groupId"));
Criteria criteria = session.createCriteria(TUser.class);
//限定查询返回检索结果中,从第一百条结果开始的20条记录
criteria.setFirstResult(100);
criteria.setMaxResults(20);
对查询结果进行排序
//查询所有groupId=2的记录
//并分别按照姓名(顺序)和groupId(逆序)排序
Criteria criteria = session.createCriteria(TUser.class);
criteria.add(Expression.eq("groupId",new Integer(2)));
criteria.addOrder(Order.asc("name"));
criteria.addOrder(Order.desc("groupId"));
分享到:
相关推荐
本文将详细介绍Hibernate中Criteria接口的常见使用方法及其背后的原理,帮助开发者更好地理解和掌握这一强大工具。 #### 二、Criteria与DetachedCriteria **1. Criteria简介** - **定义**:`Criteria`是用于构建...
`org.hibernate.Criteria` 接口代表了针对某个特定持久化类的查询。在Hibernate中,可以通过`Session` 对象的 `createCriteria()` 方法来创建一个`Criteria` 实例,即查询器。查询条件是通过`org.hibernate....
#### Criteria接口简介 `Criteria`是Hibernate提供的一个用于执行查询的标准API,它基于对象模型而不是SQL语句来构建查询,这使得开发人员能够以面向对象的方式进行数据库操作,避免了直接编写SQL带来的复杂性和...
例如,创建一个 Criteria 实例 org.hibernate.Criteria 接口表示,可以使用 Criteria 的 add(Criterion criterion) 方法来添加查询条件。Criterion 可以使用 Restrictions 工具类来创建,例如使用 eq、ge、between ...
Criteria 接口完全封装了基于字符串形式的查询语句比 Query 接口更加面向对象,Criteria 接口擅长于执行动态查询。 6. 回调接口 回调接口是 Hibernate 的一个重要组件,当一个对象发生了特定的事件,例如对象被...
Criteria接口是Criteria API的核心,它是用于创建查询的基本构建块。Criteria对象通常由SessionFactory或Session的createCriteria()方法创建,它代表了一个实体类的查询。而DetachedCriteria则是一个独立的对象,...
Criteria接口是执行查询的基础,它代表了针对特定持久化类的一个查询。通常,Criteria对象由Session对象创建,例如`session.createCriteria(User.class)`会创建一个针对User实体的Criteria实例。Criteria允许我们...
1. **Criteria接口**:Criteria查询的核心是`Session.createCriteria()`方法,它返回一个Criteria实例。这个实例就是构建查询的起点,你可以添加各种限制条件、排序规则以及分组条件等。 2. **添加限制条件**:...
1. **Criteria接口**:是Criteria API的主要入口,提供了创建查询的基本构造方法,如`add()`用于添加限制条件,`setResultTransformer()`用于结果转换,`createAlias()`和`createCriteria()`用于关联查询。...
Criteria接口则提供了一种基于对象的API来构建查询,提供了动态构造查询的能力。两者都支持数据库查询,可以根据需求灵活选用。 总的来说,这五个核心接口构建了Hibernate的基础架构,使得开发者能够在J2EE项目中...
Query 接口支持 HQL(Hibernate Query Language)和 SQL 查询,而 Criteria 接口则提供了一种基于标准 SQL 的查询方式。 **特点:** - **HQL 支持**:Query 接口支持使用 HQL 进行查询,这是一种类似于 SQL 的语言...
SessionFactory接口 SessionFactory接口负责初始化Hibernate。它充当数据存储源的代理,并负责创建Session对象。... Query和Criteria接口负责执行各种数据库查询。它可以使用HQL语言或SQL语句两种表达方式
Criteria接口则提供了一种基于对象的动态查询方式,无需预先定义查询语句,更便于代码的动态构造和维护。 4. **Transaction接口**: Transaction接口用于管理数据库事务。在Hibernate中,事务的生命周期通常与...
在探讨Hibernate中关于Criteria查询条件的选择时,我们深入解析了Criteria接口如何被用来构建复杂的查询语句,以及各种表达式如何被运用到这些查询中。以下是对文档中提及的各个知识点的详细阐述: ### Criteria...
[Hibernate体系结构的概要图] Hibernate体系结构的概要图 Hibernate的核心接口一共有6个,分别为:Session、SessionFactory... Query和Criteria接口负责执行各种数据库查询。它可以使用HQL语言或SQL语句两种表达方式
5. Criteria 接口:Criteria 接口是 Hibernate 中的条件查询接口,它提供了根据条件查询数据库的功能。 6. Configuration 接口:Configuration 接口是 Hibernate 中的配置接口,它提供了 Hibernate 的配置信息。 四...
5. Query和Criteria接口:这两个接口提供了查询数据库的方法,Query接口基于SQL,而Criteria接口提供了更面向对象的查询方式。 使用Hibernate进行开发的基本步骤如下: 1. 设计数据库,创建相应的表结构。 2. 引入...
Criteria接口提供了一种基于对象的查询方式,更易于动态构造查询条件。 【Hibernate主键生成策略】 1. Assigned:主键由应用程序负责生成并在保存对象前设定。这种方式完全独立于数据库,但需要开发者维护主键的...
【hibernate_first6项目源码】是一个关于Hibernate框架的示例项目,它在之前的版本基础上增加了使用Criteria接口进行查询的功能。Hibernate是一个流行的Java对象关系映射(ORM)框架,它简化了数据库操作,允许...
3. Query和Criteria接口:Query接口用于执行HQL和SQL查询,而Criteria接口则提供了一种面向对象的方式来构建查询,使得查询更具可读性和灵活性。 4. Configuration类:配置Hibernate的主要工具,负责加载Hibernate...