`

hibernate入门系列: 使用Criteria载入对象

阅读更多

nh会话提供一种使用表达式(就像SQL语句的where表达式)来载入数据的方法, 以取得满足条件的对象集合。

通过 CreateCriteria方法, 可以取得一个ICriteria接口, 这个接口用于操作表达式和排序字段. 由CriteriaImpl类实现, 此类加有Internal修饰,因此不能在程序集外显示创建, CreateCriteria方法需要一个要加载对象类型的参数.

这里列出ICriteria接口中的一些常用方法:

Add:加入条件表达式(Expression对象),此方法可多次调用以组合多个条件;
AddOrder:加入排序的字段(Order对象);
List:执行查询, 返回满足条件的对象集合。
SetMaxResults:设置返回的最大结果数,可用于分页;
SetFirstResult:设置首个对象返回的位置,可用于分页;
SetTimeout:设置操作的超时值,此值将传递给IDbCommand对象;



Expression类是所有表达式类的祖先. 这是一个抽象(abstract)类, 同时也是一个类工厂(Factory Method模式), 用于创建派生的表达式对象, 用意是很明显的, 隐藏了派生类的细节,使我们可通过一致的方法来创建表达式对象.

下面列出一些Expression中常用的方法:

Eq:得到一个相等判断的表达式, 等同于 propertyName = value;
Gt:得到一个大于判断的表达式, 等同于 propertyName > value; 
Like:得到一个相似判断的表达式, 等同于 propertyName like value; 
And:得到两个表达式And操作后的表达式, 等同于 expression1 and expression2; 
Or:重到两个表达式Or操作后的表达式, 等同于 expression1 or expression2;

更多的Expression请参考相关文档或源代码。

Order(排序)

Order类用于向ICriteria接口提供排序信息. 这个类提供了两个静态方法, 分别是Asc和Desc, 顾名思义就是创建升序和降序的Order对象.
例如要取得一个按更新日期(Updated)降序的Order对象, 使用Order.Desc("Updated")就可以了.

示例

下面以几个例子来说明使用Criteria载入对象的用法:

1. 取得用户名(Username)为billy的用户对象:

sql 代码
 
  1. Expression ex = Expression.Eq(  "Username" "billy"  ); // ( Username = 'billy' )  
  2. IList users = session.CreateCriteria(typeof(User )). Add ( ex ).List();  



2。取得用户名(Username)为billy, 密码(Password)为123456的用户对象

sql 代码
 
  1. Expression ex = Expression. And (   
  2.     Expression.Eq("Username" "billy" ),  
  3.     Expression.Eq("Password" "123456" )  
  4. ); // ( Username='billy' and   Password ='123456' )   
  5. IList users = session.CreateCriteria(type(User )). Add ( ex ).List();  



3. 取得数据中第20-40的用户对象。

sql 代码
 
  1. ICriteria c = session.CreateCriteria(typeof( User ));  
  2. IList users = c.SetFirstResult(20).SetMaxResults(20).List();   



   对于SQLSERVER,数据定位采用的是IDataReader前滚至firstResult处,然后取maxResults条记录.

4. 取得按注册日期(Regdate)降序排序后的用户对象.

sql 代码
 
  1. ICriteria c = session.CreateCriteria(typeof( User ));  
  2. IList users = c.AddOrder( Order . Desc ( "Regdate" ) ).List();   



使用Criteria加载数据的不足:

1. 当使用SetFirstResult和SetMaxResults限制返回的对象数时,无法得知对象的总数;
2. 当前版本不支持关联查询(hibernate好像可以);

分享到:
评论

相关推荐

    妙解Hibernate 3.x:叩响面向对象思想之门 PDF

    《妙解Hibernate 3.x:叩响面向对象思想之门》是一本深入解析Hibernate框架的专著,旨在帮助读者理解并掌握面向对象编程思想在实际开发中的应用,尤其是在使用Hibernate时如何有效地进行数据持久化。这本书是面向...

    hibernate:java持久化对象详解01

    在Java开发领域,Hibernate是一个非常重要的框架,它用于简化数据库操作,实现了对象关系映射(ORM),使得开发者可以用面向对象的方式来处理数据。本教程“hibernate:java持久化对象详解01”聚焦于理解Hibernate...

    初学hibernate,hibernate入门

    7. **HQL和Criteria查询**:Hibernate提供了HQL(Hibernate Query Language)和Criteria API,它们是面向对象的查询语言,用于替代SQL,更加灵活且与数据库无关。 8. **事务管理**:由于数据库操作通常涉及事务,...

    精通Hibernate:Java对象持久化详解.zip

    通过阅读《精通Hibernate:Java对象持久化详解》,开发者可以深入了解Hibernate的工作原理,学习如何有效地使用它来实现对象持久化,从而提高开发效率,降低维护成本。这本书对于Java Web开发者,尤其是初次接触...

    hibernate入门小例子

    7. **缓存机制**:Hibernate提供了第一级缓存(Session级别的)和第二级缓存(SessionFactory级别的),用于提高性能。了解何时和如何使用缓存是优化Hibernate应用的关键。 通过这个入门小例子,你可以学习到如何...

    hibernate系列(一)hibernate入门

    **hibernate系列(一)hibernate入门** 在Java世界中,ORM(Object-Relational Mapping,对象关系映射)框架是连接数据库与应用程序的重要桥梁,它将数据库中的数据与程序中的对象进行关联,使得开发者可以使用面向...

    精通Hibernate:Java对象持久化技术详解.pdf

    《精通Hibernate:Java对象持久化技术详解》这本书深入剖析了Hibernate这一流行的Java对象关系映射(ORM)框架,旨在帮助开发者全面理解并熟练掌握Hibernate的使用。Hibernate是Java开发中的重要工具,它简化了...

    Hibernate入门(代码+笔记)

    **第一部分:Hibernate入门** 这部分主要介绍了Hibernate的基本概念和安装配置。Hibernate基于Java Persistence API(JPA),它提供了对象关系映射(ORM)功能,将Java类映射到数据库表。首先,你需要下载Hibernate...

    Hibernate中的查询:HQL、Criteria、原生SQl

    Criteria API是Hibernate提供的另一种查询方式,它提供了一种面向对象的查询接口,允许开发者动态构建查询。这种方法更加灵活,尤其在构建复杂的查询条件时。以下是一个简单的示例: ```java Session session = ...

    Hibernate part 14:查询及数据库并发事务

    1. **Hibernate查询语言(HQL)**:Hibernate提供了一种面向对象的查询语言,类似于SQL,但操作的是对象而非表格。HQL允许开发者编写更自然的查询,例如根据属性值查找对象。 2. **Criteria API**:除了HQL,...

    Hibernate入门教程.pdf

    2. **简化持久层开发**:Hibernate提供了一系列API和工具,使得开发者可以专注于业务逻辑的实现,而不是底层数据访问的具体细节。 3. **提高代码可维护性**:由于使用了ORM技术,Hibernate能够帮助开发人员写出更加...

    hibernate:java持久化对象详解02

    本教程“hibernate:java持久化对象详解02”是系列教程的一部分,它将继续深入探讨Java中的持久化对象与Hibernate的使用方法。在开始之前,建议先学习“hibernate:java持久化对象详解01”,以确保对基础概念有清晰的...

    Hibernate基础和入门:新建表和插入表

    1. **Hibernate简介**:Hibernate是一个开源的ORM框架,它通过提供对象-关系映射,将Java类与数据库表关联起来,使得开发者可以使用面向对象的方式来处理数据库操作。 2. **环境配置**:在使用Hibernate之前,需要...

    精通Hibernate:Java持久化对象技术详解[第二版]

    5. **查询语言HQL**:介绍Hibernate特有的面向对象的查询语言HQL,与SQL进行对比,学习其语法和用法,以及 Criteria API 和 Querydsl 等高级查询方式。 6. **缓存机制**:解析Hibernate的缓存策略,包括一级缓存...

    hibernate入门

    Hibernate 提供了一种对象关系映射(ORM)解决方案,它允许Java开发者使用面向对象的方式来处理关系数据库。通过ORM,对象模型可以直接映射到数据库表,使得数据操作更加直观和便捷。 ### 二、环境配置 在开始使用...

    hibernate如何使用criteria联合查询 group by 的语句

    这个案例是根据分组查询,并且得到每组的条数,不懂得可以q我:1710086675,欢迎认识更多新朋友

    Hibernate Part 3:核心API和常量配置

    4. **HQL(Hibernate Query Language)**:Hibernate特有的面向对象的查询语言,类似于SQL,但操作对象而非表格。 5. **Transaction Management**:Hibernate支持编程式和声明式事务管理,确保数据的一致性和完整性...

    day36 04-Hibernate检索方式:多表连接查询

    在这个主题中,我们将深入探讨Hibernate的ORM(对象关系映射)机制以及如何在实际应用中处理多个数据库表之间的关联。 Hibernate是一个流行的Java持久化框架,它简化了Java应用程序与数据库之间的交互。通过使用ORM...

    Hibernate criteria基本操作

    Hibernate Criteria 是一种在Java应用程序中使用Hibernate ORM框架执行SQL查询的方式。它提供了一种面向对象的方式来构建查询,使得代码更加可读和易于维护。Criteria API 提供了多种方法来构建复杂的查询,包括添加...

Global site tag (gtag.js) - Google Analytics