`

Hibernate-Criteria 模糊查询

阅读更多

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=Ericaand sex=<chmetcnv w:st="on" tcsc="0" numbertype="1" negative="False" hasspace="False" sourcevalue="1" unitname="”"></chmetcnv>1的封装(我们可以打开Hibernate show_sql 选项,

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

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

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

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

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

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

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

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

 Criteria 查询表达式

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

 方法添加到Criteria实例中。

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

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

 方法 描述

 Expression.eq 对应SQLfield = 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)位于1350间内。

 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

分享到:
评论
3 楼 爱老虎哟 2010-04-05  
其实只要sql/hql还行的话,没必要用这个了吧
2 楼 NicholasBugs 2008-05-30  
>>Expression.eq(String arg0, String arg1)对应SQL“field = value”表达式。
这句是有问题的,
其实arg0代表的是被查询对象的属性,而不是database中的域,arg1指查询的条件。
比如Expression.eq("name", "erica");就指 TUser对象的name属性值为erica的对象被返回。

我是在使用Expression  用对象中的many-to-one 属性查询时发现这个问题的。
1 楼 andrewdu 2007-06-29  
如果我在查询 条件里面输入了%,
实际上我是想要 对应字段里有%的记录

但是%是SQL的通配符,可能会把所有数据都给查出来

怎么样才能查询有%的记录呢?

相关推荐

    Hibernate-Criteria_模糊查询

    在深入探讨Hibernate与Criteria结合进行模糊查询之前,我们先来了解一下Hibernate和Criteria的基本概念,以及为何选择使用它们进行模糊查询。 ### Hibernate简介 Hibernate是一个开放源代码的对象关系映射(ORM)...

    hibernateCriteria查询

    ### Hibernate Criteria 查询详解 #### 一、概述 Hibernate Criteria 查询是一种强大的对象化查询方式,它为开发者提供了一种灵活而直观的方式来构建复杂的查询逻辑。与传统的SQL查询相比,Criteria查询更加面向...

    hibernate-search-5.5.4 api docset for Dash

    10. **Integration with Hibernate Criteria and HQL**:Hibernate Search可以与Hibernate的Criteria API和HQL集成,允许在查询中混合使用全文搜索和传统的关系型查询。 在使用"hibernate-search-5.5.4.docset"时,...

    Hibernate的Criteria用法总结

    在Java持久层框架Hibernate中,Criteria API是一种动态构建SQL查询的方法,它允许开发者在运行时构建查询,提供了更面向对象的查询方式。本篇将详细阐述Hibernate Criteria API的使用。 首先,Criteria API由...

    hibernate 模糊查询 分页

    当我们想要实现模糊查询时,可以利用`Criteria` API或者`HQL`(Hibernate Query Language)来完成。例如,如果我们要查询一个名为`User`的实体类中所有名字包含"John"的用户,可以这样做: ```java Session session...

    Hibernate中Criteria的完整用法

    Hibernate中的Criteria API是一种用于执行动态查询的机制,它允许开发者在运行时构建SQL查询,而无需直接编写SQL语句。Criteria API提供了更加面向对象的方式来处理数据库查询,这使得代码更易于理解和维护,尤其是...

    Hibernate的Criteria文档

    在Java的持久层框架Hibernate中,Criteria API是一个强大的查询工具,它可以用来替代传统的SQL或HQL(Hibernate Query Language)查询,以实现更加面向对象的数据库交互。Criteria API的设计旨在屏蔽不同数据库之间...

    Hibernate中Criteria的用法详解

    在Java的持久化框架Hibernate中,Criteria API是一个强大的查询工具,它可以用来构建动态和复杂的查询。Criteria API的主要优点在于它的灵活性,允许开发者在运行时构建查询,而不必预先定义HQL(Hibernate Query ...

    Hibernate的Criteria用法

    Hibernate的Criteria API是一种用于动态构建SQL查询的方法,无需手动编写HQL(Hibernate Query Language)语句。它提供了一种面向对象的方式来构建查询条件,使得代码更加简洁且易于维护。以下是对Criteria用法的...

    hibernate-search-4.3.0.Final

    5. **执行搜索**:使用QueryBuilder或Criteria API构造查询,并获取搜索结果。 五、最佳实践 - **选择合适的分析器**:根据字段内容的特性(如是否为英文、中文等)选择合适的分析器,以提高搜索效果。 - **缓存...

    struts+hibernate分页 模糊查询

    ### Struts + Hibernate 分页与模糊查询 #### 一、简介 在软件开发过程中,特别是Web应用程序中,分页查询和模糊查询是非常常见的需求。本文将详细介绍如何利用Struts框架结合Hibernate实现这两种功能。 #### 二...

    Hibernate中Criteria的使用

    本篇将详细探讨Hibernate中的Criteria API,这是一种灵活且强大的查询机制,用于执行动态查询。 Criteria API提供了一种类型安全的方式来构建SQL查询,避免了直接操作字符串造成的潜在错误。它的主要优点在于可以在...

    Hibernate中Criteria的用法

    而在Hibernate提供的多种查询方式中,Criteria API是一种非常灵活且强大的查询工具,它支持复杂的条件组合以及分组、排序等功能,为开发者提供了更为方便的查询手段。 #### 二、Criteria简介 Criteria是Hibernate...

    hibernate search4.2

    `FullTextQuery` 提供了构建全文查询的方法,支持 Lucene 的查询语法,也可以使用 Hibernate 的 Criteria API 或 HQL 来构建查询。 ### 性能优化 - 分布式索引:通过设置多个索引节点,实现索引的分布式存储和查询...

    Hibernate中Criteria的完整用法.docx

    在Java开发中,尤其是在使用ORM框架Hibernate时,Criteria API提供了一种非常灵活的方式来构建复杂的查询。本文将详细介绍Hibernate中的Criteria API及其子类DetachedCriteria的使用方法,以及如何利用它们进行高效...

    hibernate criteria的使用方法

    1. **Criteria**:`org.hibernate.Criteria` 接口是 Criteria 查询的核心,它提供了各种方法来设置查询条件。 2. **Criterion**:`org.hibernate.criterion.Criterion` 接口定义了一个查询标准,用于表示查询条件。 ...

Global site tag (gtag.js) - Google Analytics