`

Hibernate中DetachedCriteria的使用(转)

阅读更多
Criteria對SQL進行封裝,讓開發人員可以用物件的方式來對資料庫進行操作,例如下面的查詢User表格中的所有資料:

Criteria criteria = session.createCriteria(User.class);
// 查詢user所有欄位
List users = criteria.list();
Iterator iterator =  users.iterator();
System.out.println("id \t name/age");
while(iterator.hasNext()) {
    User user = (User) iterator.next();
    System.out.println(user.getId() +
                               " \t " + user.getName() +
                               "/" + user.getAge());           
}


Hibernate實際上使用以下的SQL來查詢資料庫:

select this_.id as id0_, this_.name as name0_0_, this_.age as age0_0_ from user this_


Criteria實際上只是個容器,如果想要設定查詢條件,則要使用add()方法加入Restrictions的條件限制,例如查詢age大於20且小於40的資料:

Criteria criteria = session.createCriteria(User.class);
criteria.add(Restrictions.gt("age", new Integer(20)));
criteria.add(Restrictions.lt("age", new Integer(40)));
List users = criteria.list();


您也可以使用邏輯組合來進行查詢,例如結合age等於(eq)20或(or)age為空(isNull)的條件:

Criteria criteria = session.createCriteria(User.class);
criteria.add(Restrictions.or(
                   Restrictions.eq("age", new Integer(20)),
                   Restrictions.isNull("age")
               ));
List users = criteria.list();


也可以使用sqlRestriction()方法來提供SQL語法作限定查詢,例如查詢name以cater開頭的資料:

Criteria criteria = session.createCriteria(User.class);
criteria.add(Restrictions.sqlRestriction("{alias}.name LIKE (?)", "cater%", Hibernate.STRING));
List users = criteria.list();


其中alias將被替換為與User類別相關的名稱,而?將被替換為cater%,也就是第二個參數所提供的值,在SQL撰寫時,不必再寫WHERE,如果有多個查詢條件,例如BETWEEN子句的查詢,則可以如下:

Criteria criteria = session.createCriteria(User.class);
Integer[] ages = {new Integer(20), new Integer(40)};
Type[] types = {Hibernate.INTEGER, Hibernate.INTEGER};
criteria.add(Restrictions.sqlRestriction("{alias}.age BETWEEN (?) AND (?)", ages, types));
List users = criteria.list();


Restrictions的幾個常用限定查詢方法如下表所示:
方法 說明
Restrictions.eq 等於
Restrictions.allEq 使用Map,使用key/value進行多個等於的比對
Restrictions.gt 大於 >
Restrictions.ge 大於等於 >=
Restrictions.lt 小於 <
Restrictions.le 小於等於 <=
Restrictions.between 對應SQL的BETWEEN子句
Restrictions.like 對應SQL的LIKE子句
Restrictions.in 對應SQL的in子句
Restrictions.and and關係
Restrictions.or or關係
Restrictions.sqlRestriction SQL限定查詢






==============



Hibernate Criteria 关联查询
前面讲了Criteria看起来比HQL顺眼多了,接着继续。

如果每个美女都有自己的客户资源(不要想歪了!),那么需要查询拥有客户Gates的美女怎么办?

使用Criteria可以有两种方法:

1:
DetachedCriteria beautyCriteria = DetachedCriteria.forClass(Beauty.class).createCriteria("customers");
beautyCriteria.add(Restrictions.eq("name", "Gates")):

2:
DetachedCriteria beautyCriteria = DetachedCriteria.forClass(Beauty.class).createAlias("customers", "c");
beautyCriteria.add(Restrictions.eq("c.name", "Gates")):

接着有了新的要求,年纪太大的美女不要,还是查找拥有客户Gates的,条件如下:
DetachedCriteria beautyCriteria = DetachedCriteria.forClass(Beauty.class, "b").;
DetachedCriteria customerCriteria = beautyCriteria.createAlias("customers", c");
beautyCriteria.add(Restrictions.le("b.age", new Long(20))):
customerCriteria.add(Restrictions.eq("c.name", "Gates")):

关于Criteria更详细的资料,Hibernate的源代码和测试是最好的文档。
分享到:
评论

相关推荐

    Hibernate 使用DetachedCriteria操作

    在DetachedCriteria中定义的查询条件可以在稍后的时间点附加到Session上执行,这使得查询可以脱离当前的Session状态,因此得名“Detached”。这种特性在处理复杂的、跨多个事务的查询时非常有用,同时也可以避免因长...

    Hibernate - DetachedCriteria 的完整用法

    Hibernate 的 Criteria 和 DetachedCriteria 是两个不同的概念,虽然它们都是用于查询数据的,但它们在创建和使用上有所不同。 首先,Criteria 是在线的,需要通过 Hibernate Session 来创建,即使用 `session....

    Hibernate(24): 为什么用DetachedCriteria不能表连接地取数据?

    如果要在DetachedCriteria中查询这两个实体的关联数据,可以先分别构建DetachedCriteria,然后在执行时合并它们,但这实际上并不是真正的JOIN操作,而是通过两个独立的查询来模拟JOIN的效果。 例如,你可以这样操作...

    DetachedCriteria使用介绍

    子查询是 `DetachedCriteria` 的另一大亮点,它可以让你在主查询中嵌入另一个查询语句。例如,要查询所有与特定职务相关的人员,可以通过以下方式实现: ```java // 主查询: 人员查询 DetachedCriteria searDc = ...

    Hibernate中Criteria的使用

    Hibernate 中 Criteria 的使用 Hibernate 中 Criteria 的使用是 Hibernate 框架中的一种查询机制,对于研究 Hibernate 源码有一些作用。在查询方法设计上可以灵活地根据 Criteria 的特点来方便地进行查询条件的组装...

    hibernate中文参考文档pdf

    14. **Hibernate与JPA**:比较Hibernate与Java Persistence API(JPA)的关系,以及如何在JPA规范下使用Hibernate。 15. **其他高级特性**:包括实体继承、多态性、集合映射、复杂类型、时间/日期处理、SQL特定功能...

    Hibernate中Criteria的完整用法

    使用 Criteria 进行查询,主要要清晰的是 Hibernate 提供了那些类和方法来满足开发中查询条件的创建和组装。通过 Criteria,可以根据实际情况灵活地组装查询条件,以满足复杂的查询需求。 Hibernate 的 Criteria 是...

    DetachedCriteria查询

    DetachedCriteria 是 Hibernate 中的一种离线查询对象,它可以在不依赖 Session 的情况下生成动态 SQL 语句并进行查询。下面是 DetachedCriteria 查询的详细知识点: 创建 DetachedCriteria 对象 DetachedCriteria...

    DetachedCriteria Criteria 使用方法

    假设我们要查询 `User` 表格中的所有资料,可以使用以下方式创建 `DetachedCriteria` 并执行查询: ```java // 创建 DetachedCriteria DetachedCriteria criteria = DetachedCriteria.forClass(User.class); // ...

    Hibernate_使用示例代码

    **标题:“Hibernate_使用示例代码”** **描述:** 这篇资源主要提供了关于Hibernate框架的实战应用示例,作者在iteye博客上分享了相关的代码实现。通过学习这些示例,开发者可以更好地理解和掌握如何在实际项目中...

    java Hibernate 中文API文档

    这个中文API文档是开发者在使用Hibernate进行开发时的重要参考资料,提供了详细的类、接口和方法描述,使得理解并应用Hibernate更加容易。下面将详细阐述Hibernate的核心概念和主要功能。 1. **对象关系映射(ORM)...

    Hibernate3中文文档

    3. **实体类和注解**:在Hibernate3中,可以使用注解来标记实体类及其属性,如`@Entity`、`@Table`、`@Column`等,这些注解定义了对象如何映射到数据库表。 4. **持久化类和标识符**:每个实体类都有一个唯一的...

    hibernate-distribution中文帮助手册

    Hibernate是一个流行的开源对象关系映射(ORM)工具,它允许Java开发者在数据库操作中使用面向对象的方式,极大地简化了数据库编程。 描述中的"来自:...

    Hibernate 3.2.0 中文官方文档

    在Hibernate 3.2.0 中,主要知识点包括以下几个方面: 1. **对象关系映射(ORM)**:Hibernate的核心功能是将Java类映射到数据库表,使得对象可以直接在数据库中持久化。这减少了数据库操作的复杂性,提高了开发...

    hibernate中的查询方式

    - **局限性:** HQL只适用于Hibernate框架,无法在其他ORM框架中使用。 **适用场景:** - 当需要进行复杂查询且不希望暴露数据库结构时。 - 当项目使用Hibernate作为持久层框架时。 #### 二、Criteria查询 ...

    hibernate in action 中文版书籍

    Hibernate是Java开发中广泛使用的开源框架,它简化了数据库操作,将复杂的SQL语句与Java对象之间建立映射关系,从而实现数据的透明管理。 这本书籍主要涵盖了以下几个核心知识点: 1. **Hibernate概述**:介绍...

    Hibernate_query查询数据表中的一个字段.

    本篇将详细讲解如何使用Hibernate进行查询,特别是针对数据表中的一个特定字段。 一、Hibernate简介 Hibernate是Java领域的一个开源ORM框架,它简化了数据库操作,通过映射Java类到数据库表,可以将数据库操作转化...

    hibernate中文帮助pdf

    3. **实体类和映射文件**:理解Hibernate中的实体类(Entity)概念,学习如何创建Java类来代表数据库中的表,并使用XML或注解进行映射配置。 4. **Session和Transaction**:学习Hibernate的核心接口`Session`,了解...

    Hibernate 手册中文版chm格式

    5. Criteria API和DetachedCriteria:进一步深入,探讨如何使用Criteria API执行复杂的查询,并介绍DetachedCriteria,用于在不同会话间构建和执行查询。 6. Native SQL:当需要充分利用数据库特定特性时,可以使用...

    Hibernate中文参考文档

    要使用Hibernate,首先需要将其依赖库添加到项目中。这通常通过Maven或Gradle构建工具完成。接着,配置hibernate.cfg.xml文件,其中包含数据库连接信息、实体映射文件路径等关键设置。 三、实体类与映射 在...

Global site tag (gtag.js) - Google Analytics