`
lanxin1985
  • 浏览: 83004 次
  • 性别: Icon_minigender_2
  • 来自: 大连
社区版块
存档分类
最新评论

Hibernate3中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")):
分享到:
评论

相关推荐

    Hibernate - DetachedCriteria 的完整用法

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

    Hibernate 使用DetachedCriteria操作

    **Hibernate 框架及其DetachedCriteria...以上就是关于Hibernate中DetachedCriteria的详细介绍,希望对你在理解和使用Hibernate进行数据库操作时有所帮助。在实践中不断探索和实践,你会发现更多使用技巧和优化策略。

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

    在Java的持久化框架Hibernate中,DetachedCriteria是一个强大的查询工具,它允许我们在不与Session交互的情况下构建查询条件。然而,DetachedCriteria在处理复杂的关联查询,尤其是涉及到表连接(JOIN)时,可能存在...

    Hibernate3中文文档

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

    DetachedCriteria使用介绍

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

    Hibernate中Criteria的使用

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

    Hibernate 3.2.0 中文官方文档

    3. **实体类和映射文件**:理解实体类的定义,以及如何使用Hibernate注解或XML映射文件将这些类与数据库表关联。比如@Entity、@Table、@Id等注解的使用。 4. **CRUD操作**:了解如何使用Hibernate进行创建(Create)...

    DetachedCriteria查询

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

    hibernate3使用手册

    以上是对Hibernate3的一些基础知识点的介绍,通过深入学习《Hibernate3使用手册》中的内容,开发者可以更好地掌握这个强大的ORM工具,从而提升Java应用的数据处理效率和灵活性。对于《hibernate3[1].2参考.pdf》和...

    hibernate-distribution中文帮助手册

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

    DetachedCriteria Criteria 使用方法

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

    hibernate3.zip

    2. **配置文件**:在Hibernate3中,通常需要两个主要的配置文件——`hibernate.cfg.xml`和实体类的映射文件(如`.hbm.xml`)。`hibernate.cfg.xml`配置数据库连接信息,而`.hbm.xml`文件则定义了类与表之间的映射...

    hibernate中文参考文档pdf

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

    hibernate api 中文

    2. CriteriaBuilder:JPA的一部分,但也可以在Hibernate中使用,提供了构建Criteria查询的 fluent API。 3. EntityManager和EntityManagerFactory:虽然不是Hibernate特有的,但在JPA规范中,它们与SessionFactory和...

    Hibernate中Criteria的完整用法

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

    Hibernate_使用示例代码

    3. **实体类(Entity)**:示例代码中,会包含一些代表数据库表的Java类,它们通过注解如`@Entity`、`@Table`等,定义了与数据库表的映射关系。 4. **属性映射(Field Mapping)**:实体类中的属性对应数据库表的列...

    Hibernate 手册中文版chm格式

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

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

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

    hibernate in action 中文版书籍

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

    Hibernate3.2中文手册

    Hibernate 是一个开源的对象关系映射(ORM)框架,它允许Java开发者在Java应用程序中使用对象模型,而无需直接处理SQL语句。Hibernate3.2是该框架的一个重要版本,它引入了多项增强功能和优化,提高了开发效率和性能...

Global site tag (gtag.js) - Google Analytics