`

Hibernate Criteria Query

阅读更多

Hibernate-Criteria Query 收藏
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的完整用法.docx

    Hibernate中Criteria的完整用法

    HIBERNATE_QUERY

    如果希望通过编程的方式创建查询,Hibernate提供了完善的按条件(Query By Criteria, QBC)以及按样例(Query By Example, QBE)进行Hibernate查询的功能。 你也可以用原生SQL(native SQL)描述Hibernate查询,Hibernate...

    MockDatabase:一个模拟数据库,用于对Hibernate Criteria,Query和SQLQuery进行单元测试

    MockDatabase-开发 一个模拟数据库,用于对Hibernate Criteria,Query和SQLQuery进行单元测试。

    Hibernate中Criteria的完整用法

    Hibernate中Criteria的完整用法 QBE (Query By Example) Criteria cri = session.createCriteria(Student.class); cri.add(Example.create(s)); //s是一个Student对象 list cri.list(); 实质:创建一个模版,比如...

    Hibernate各种查询:联表查询 分页查询 位置参数查询(?) 占位符查询(冒号查询) 统计查询

    Hibernate中使用Criteria Query各种QBC查询

    Hibernate Web应用的开发步骤

    Hibernate Web应用的开发一般经过以下几个步骤: (1)创建数据库。 (2)将Hibernate所需的JAR包复制到WEB-INF/lib下。 (3)创建Hibernate的配置文件。...(9)通过创建的Query或Criteria实例实现数据库的查询。

    Hibernate体系结构的概要图

    Hibernate的核心接口一共有6个,分别为:Session、SessionFactory、Transaction、Query、Criteria和Configuration。这6个核心接口在任何开发中都会用到。通过这些接口,不仅可以对持久化对象进行存取,还能够进行事务...

    SQLib:Criteria Builder和Hibernate Query Builder的更简单和自定义的实现

    SQLib:Criteria Builder和Hibernate Query Builder的更简单和自定义的实现

    hibernate4.3完整jar包

    Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java...Hibernate的核心接口一共有6个,分别为:Session、SessionFactory、Transaction、Query、Criteria和Configuration。

    hibernate学习文档

    hibernate 学习资料 Session接口 Query和Criteria接口 Hibernate主键介绍 二级缓存的管理

    hibernate_third项目源码

    这份代码,主要演示了hibernate的各种查询方式。包括query,criteria,sql等

    hibernate 完整教程 自学

    SessionFactory接口  SessionFactory接口负责初始化Hibernate。它充当数据存储源的代理,并负责创建Session对象。... Query和Criteria接口负责执行各种数据库查询。它可以使用HQL语言或SQL语句两种表达方式

    Hibernate的五个核心接口介绍.png

    Hibernate的五个核心接口 Configuration SessionFactory Session Transcation Query和Criteria

    hibernate 查询?Hibernate的HQL查询

    数据查询与检索是Hibernate中的一... *标准化对象查询(Criteria Query):以对象的方式进行查询,将查询语句封装为对象操作。优点:可读性好,符合Java程序员的编码习惯。缺点:不够成熟,不支持投影(projection)或统

    hibernate 教程

    Hibernate查询语言(Query Language), 即HQL 11.1. 大小写敏感性(Case Sensitivity) 11.2. from 子句 11.3. 联合(Associations)和连接(joins) 11.4. select子句 11.5. 统计函数(Aggregate ...

    Beginning.Hibernate.For.Hibernate.5.4th.Edition

    Search and query with the new version of Hibernate Integrate with MongoDB using NoSQL Keep track of versioned data with Hibernate Envers Who This Book Is For Experienced Java developers interested in ...

    Hibernate+中文文档

    3.8. Hibernate SQL方言 (hibernate.dialect) 3.9. Hibernate日志类别 3.10. JTA TransactionManagers 9.1. 继承映射特性(Features of inheritance mappings) 16.1. 别名注射(alias injection names) 19.1. ...

    Hibernate Recipes A Problem-Solution Approach

    How to use Hibernate Query Language (HQL) How to perform batch processing and use native SQL, criteria queries, caching objects, and more How to enable Hibernate in web applications with e-commerce ...

    hibernate3.2中文文档(chm格式)

    HIBERNATE - 符合Java习惯的关系数据库持久化 Hibernate参考文档 3.2 -------------------------------------------------------------------------------- 目录 前言 1. 翻译说明 2. 版权声明 1. Hibernate...

    HibernateAPI中文版.chm

    HIBERNATE - 符合Java习惯的关系数据库持久化 Hibernate参考文档 3.2 -------------------------------------------------------------------------------- 目录 前言 1. 翻译说明 2. 版权声明 1. Hibernate...

Global site tag (gtag.js) - Google Analytics