`
wgx198302
  • 浏览: 31273 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Hibernate-Criteria 模糊查询(转自http://www.cn-java.com/www1/?uid-564442-action-viewsp)

阅读更多
  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-Criteria 模糊查询详解 在Java的持久化技术中,Hibernate作为ORM(对象关系映射)框架的一种,提供了强大的数据访问能力。而其中的`Criteria`接口更是为复杂的查询需求提供了一种灵活且功能强大的...

    reg_login登录系统

    - **Hibernate配置**:理解实体类与数据库表的关系,以及如何使用HQL或 Criteria API 进行查询。 - **安全实践**:研究如何使用Spring Security保护敏感资源,如登录接口,防止SQL注入和跨站脚本攻击(XSS)。 - **...

    Hibernate-Criteria_模糊查询

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

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

    《深入理解Hibernate JPA 2.1 API》 在Java世界中,ORM(Object-Relational Mapping)框架已经成为开发数据库应用程序不可或缺的一部分。其中,Hibernate作为一款功能强大的ORM框架,极大地简化了Java对象与数据库...

    hibernate-release-4.3.10.Final.zip

    Hibernate,作为Java领域最著名的对象关系映射(ORM)框架之一,自诞生以来就深受开发者喜爱。本次我们聚焦于`hibernate-release-4.3.10.Final`版本,这是一个稳定且功能丰富的版本,为开发者提供了强大的数据持久化...

    udemy-jpa-with-hibernate:此资源来自课程https://www.udemy.comhibernate-jpa-tutorial-for-beginners-in-100-steps

    《udemy-jpa-with-hibernate》课程资源是一个深入学习Java持久化层技术JPA(Java Persistence API)和ORM(Object-Relational Mapping)框架Hibernate的综合教程。通过这个课程,初学者可以逐步掌握如何在实际项目中...

    hibernate-core-5.0.11.Final.jar

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

    hibernate-release-5.0.7.Final.zip官方

    DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"&gt; &lt;hibernate-configuration&gt; &lt;session-factory&gt; ...

    java上万个实例源代码例子 链接搜集

    - **链接**: `http://www.java2java.com/CN/Tutorial/Java/0350__Hibernate/0260__Criteria.htm` - **说明**: Criteria API是Hibernate提供的高级查询API之一,它提供了灵活的方式来构建查询条件。 ##### (3) 主键...

    hibernate-release-4.3.9.Final.rar

    《Hibernate 4.3.9.Final:持久化框架的核心技术与实践》 Hibernate,作为Java领域中的一个著名ORM(对象关系映射)框架,它极大地简化了数据库操作,使得开发者能够以面向对象的方式来处理数据库交互。这次我们...

    hibernate-orm-master.zip

    为了提升性能,Hibernate提供了多种优化手段,如:批处理(Batch Processing)、预加载(Preloading)、缓存策略调整、避免N+1查询问题等。理解并运用这些技巧,可以在保证代码简洁的同时,提升应用性能。 通过深入...

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

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

    hibernate-release-4.3.1.Final.zip

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

    JPA入门(二)

    JPA还支持更复杂的查询语言JPA Query Language (JPQL) 和 Criteria API,提供更灵活的查询方式。 ### 5. 批量操作与缓存 JPA提供了批量操作的方法,如`em.flush()`用于提交当前实体管理器的所有更改到数据库,`em....

    hibernate-release-5.0.7.Final.zip

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

    spring-hibernate.zip

    Hibernate HQL(Hibernate Query Language)或JPA(Java Persistence API)的Criteria API可以用来执行复杂的查询操作。 8. **测试**:Spring Test和Hibernate Test支持可以帮助我们编写单元测试和集成测试,确保...

    hibernate-entitymanager-3.3.0.GA

    它不仅提供了JPA规范的所有功能,还额外扩展了一些特性,如更强大的查询语言HQL(Hibernate Query Language)和 Criteria API,以及对事务和缓存的管理。 3. **3.3.0.GA版本特点** - **稳定性**:3.3.0.GA是一个...

    hibernate-jpa-2.1-api-1.0.0.Final.jar

    首先,Hibernate-JPA 2.1 API 是Hibernate对Java Persistence 2.1规范的实现,它提供了一系列接口和类,使得开发者可以方便地进行实体管理、查询、事务控制等操作。`1.0.0.Final`版本意味着这是一个稳定版本,适合...

Global site tag (gtag.js) - Google Analytics