`

Hibernate-Criteria Query (转)

    博客分类:
  • SSH
 
阅读更多

Hibernate-Criteria Query   

2008-01-25 10:06:54 |  分类: hibernate | 字号   订阅

Criteria Query通过面向对象化的设计,将数据查询条件封装为一个对象。简单来

 讲,Criteria Query可以看作是传统SQL的对象化表示,如:

 Criteria criteria = session.createCriteria(User.class);

 criteria.add(Expression.eq("name","Erica"));

 criteria.add(Expression.eq("sex",new Integer(1)));

 这里的criteria 实例实际上是SQL “Select * from t_user where

 name=’Erica’ and sex=1”的封装(我们可以打开Hibernate 的show_sql 选项,

 以观察Hibernate在运行期生成的SQL语句)。

 Hibernate 在运行期会根据Criteria 中指定的查询条件(也就是上面代码中通过

 criteria.add方法添加的查询表达式)生成相应的SQL语句。

 这种方式的特点是比较符合Java 程序员的编码习惯,并且具备清晰的可读性。正因

 为此,不少ORM实现中都提供了类似的实现机制(如Apache OJB)。

 对于Hibernate的初学者,特别是对SQL了解有限的程序员而言,Criteria Query

 无疑是上手的极佳途径,相对HQL,Criteria Query提供了更易于理解的查询手段,借

 助IDE的Coding Assist机制,Criteria的使用几乎不用太多的学习。

 Criteria 查询表达式

 Criteria 本身只是一个查询容器,具体的查询条件需要通过Criteria.add

 方法添加到Criteria实例中。

 如前例所示,Expression 对象具体描述了查询条件。针对SQL 语法,

 Expression提供了对应的查询限定机制,包括:

 方法 描述

 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区间内。

 Expression.between("age",new

 Integer(13),new Integer(50));

 表达式

 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”起始的记录:

 Expression.sql(

 “lower({alias}.name) like lower(?)”,

 "Erica%",

 Hibernate.STRING

 );

 其中的“{alias}”将由Hibernate在运行期使

 用当前关联的POJO别名替换。

 注意Expression 各方法中的属性名参数(如Express.eq中的第一个参数),这里

 所谓属性名是POJO中对应实际库表字段的属性名(大小写敏感),而非库表中的实

 际字段名称。

 Criteria 高级特性

 限定返回的记录范围

 通过criteria. setFirstResult/setMaxResults 方法可以限制一次查询返回

 的记录范围:

 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作为一种对象化的查询封装模式,不过由于Hibernate在实现过程中将精力

 更加集中在HQL查询语言上,因此Criteria的功能实现还没做到尽善尽美(这点上,OJB

 的Criteria 实现倒是值得借鉴),因此,在实际开发中,建议还是采用Hibernate 官

 方推荐的查询封装模式:HQL。

分享到:
评论

相关推荐

    Hibernate-Criteria 模糊查询

    Hibernate作为一款优秀的Java持久层框架,提供了多种方式来进行数据库操作,其中包括HQL(Hibernate Query Language)、Criteria API以及Native SQL等。其中,Criteria API由于其简洁的API设计和强大的查询能力,受...

    Hibernate-Criteria_模糊查询

    当然,随着项目的复杂度增加,可能还需要结合其他高级查询技术,如HQL(Hibernate Query Language)或JPQL(Java Persistence Query Language),以满足更复杂的查询需求。但无论如何,掌握Hibernate-Criteria的模糊...

    hibernate-release-5.0.7.Final的所有jar包

    它包含了对JPA(Java Persistence API)的实现,以及Hibernate特有的特性,如 Criteria 查询、HQL(Hibernate Query Language)等。 2. **hibernate-entitymanager**: 用于支持JPA规范,提供实体管理和事务处理。...

    hibernate-release-5.2.10

    此外,还有Criteria API和JPQL(Java Persistence Query Language)供选择。 5. **事务管理**:Hibernate支持编程式和声明式事务管理,确保数据的一致性。 6. **缓存**:Hibernate内置了二级缓存机制,可以通过配置...

    hibernate-core-5.0.11.Final.jar

    5. **Query**:提供了HQL(Hibernate Query Language)和Criteria API,允许以面向对象的方式执行数据库查询。 四、源码分析 深入源码,我们可以看到以下关键部分: - `Configuration`类:负责读取和解析...

    hibernate-core 核心jar包

    5. **HQL(Hibernate Query Language)**:这是Hibernate提供的面向对象的查询语言,类似于SQL,但操作的是对象而不是表格。HQL支持复杂的查询,包括联接、子查询、聚合函数等,可以避免直接写SQL,提高代码的可读性...

    hibernate-jpa-2.1-api-1.0.0.final.jar.zip

    - **查询语言**: JPQL(Java Persistence Query Language)是JPA的SQL等价物,支持面向对象的查询。JPA 2.1引入了类型安全的 Criteria API,可以更安全地构建动态查询,避免SQL注入。 - **多版本并发控制**: JPA ...

    hibernate-5.2.15. 最新jar包

    3. **Query和Criteria API**:提供两种方式执行查询,一是HQL(Hibernate Query Language),类似于SQL但面向对象;二是Criteria API,提供了一种类型安全的、更具面向对象特性的查询方式。 4. **第二级缓存**:...

    hibernate-release-5.0.7.Final.zip

    - Criteria API:提供了一种更灵活、更类型安全的方式来执行查询,替代了传统的HQL(Hibernate Query Language)。 - Object-Relational Mapping:通过XML或注解方式定义实体类和数据库表之间的映射关系,实现对象...

    hibernate-release-4.3.1.Final.zip

    同时,Hibernate提供了HQL(Hibernate Query Language)和Criteria API等高级查询方式,使得查询更加灵活和强大。 总的来说,这个压缩包是Hibernate的一个完整发行版,包含所有必要的组件,适合于基于SSH框架的Java...

    最新 hibernate-release-4.2.13.Final.tgz

    4. 查询语言:理解HQL(Hibernate Query Language)和Criteria API,以及它们与SQL的关系和优势。 三、参考文档 文档是学习任何技术的重要资源。Hibernate 4.2.13.Final的参考文档详细介绍了框架的所有组件、API和...

    hibernate-release-5.0.0.Final(1).zip

    3. Query:提供HQL(Hibernate Query Language)和JPQL(Java Persistence Query Language)来执行数据库查询,也可以通过Criteria API构建动态查询。 4. Transaction:Hibernate支持事务管理,确保数据的一致性和...

    hibernate-release-5.3.2.Final

    3. 新的查询语言:HQL(Hibernate Query Language)和JPQL(Java Persistence Query Language)进一步完善,支持更复杂的查询表达式,同时增加了对构造函数查询的支持。 4. 错误修复和兼容性提升:5.3.2.Final修复了...

    hibernate-common-annotations.jar

    Hibernate不仅提供了数据持久化的解决方案,还包含了查询语言HQL(Hibernate Query Language)以及 Criteria 查询等高级功能。 二、JPA与Hibernate注解 JPA是Java EE规范的一部分,它定义了一种标准接口,用于实现...

    hibernate-distribution-3.6.2 API及jar包

    testing.jar`来搭建开发环境,然后根据`hibernate-reference.pdf`文档的指导,配置Hibernate的属性文件(如hibernate.cfg.xml),定义实体类和映射文件(如.hbm.xml或使用注解),编写HQL或Criteria查询,实现数据的...

    hibernate-orm-master.zip

    4. **查询语言**:Hibernate Query Language (HQL) 是一种面向对象的查询语言,类似于SQL,但操作的是对象和属性。此外,Criteria API提供了一种更面向对象的方式来构建查询,避免硬编码SQL,增强代码的可读性。 5....

    hibernate-distribution-3.3.2.GA-dist

    3. **查询语言HQL**:Hibernate Query Language(HQL)是一种面向对象的查询语言,类似于SQL,但更接近Java的语法,可以更方便地进行对象查询。 4. **Criteria查询**:提供了一种基于对象的查询方式,允许开发者...

    hibernate-annotations-3.4.0.GA and hibernate-entitymanager-3.4.0.GA

    - QBC(Query By Criteria):基于Java对象的查询方式,提供构建查询条件的API。 通过以上讲解,我们可以看出`hibernate-annotations-3.4.0.GA`和`hibernate-entitymanager-3.4.0.GA`在Java ORM开发中扮演着重要...

    hibernate-release-5.2.2.Final

    此外,Hibernate还支持HQL(Hibernate Query Language)和Criteria API,提供更灵活的查询方式。 总结来说,`hibernate-release-5.2.2.Final`是一个完整的Hibernate ORM解决方案,涵盖了从对象映射、数据操作到验证...

    hibernate-core包

    `Query`接口和JPA的`CriteriaBuilder`是`hibernate-core`中的查询工具,它们提供了更强大的查询构建能力,支持参数绑定、分页、排序等功能。 8. **第二级缓存** Hibernate的第二级缓存可以通过插件实现,如...

Global site tag (gtag.js) - Google Analytics