`
javatoyou
  • 浏览: 1084758 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

NHibernate Step by Step (四)Session、Query及HQL

 
阅读更多
我们总结一下在第二篇中的Session操作:

1. 获取记录

Personperson=(Person)session.Get(typeof(Person),1);

2. 保存记录

session.Save(person);

3. 删除记录

Personperson=(Person)session.Get(typeof(Person),1);

session.Delet(person);

我们再来看看其它几种方式:

1. Load

Personperson=(Person)session.Load(typeof(Person),1);

是不是感觉和Get一样?其实……很不一样!

Get在找不到对象时会返回一个null引用,而Load则会抛出一个ObjectNotFoundException,所以,不应该用Load来判断记录是否存在。另外还有两条非常重要的区别,我们将放在高级话题讨论。

2. Query

IListlist=session.CreateQuery(“fromPerson”).List();

Personperson
=(Person)list[0];

~!#@^?? from Person??#$@*&^$

这是虾米??

好象有点象SQL,不过少了个select啊!而且也没有表名啊!

这就是久负盛名的HQL——Hibernate Query Language!

HQL实际上是基于对象查询的一种仿SQL脚本,在运行期间,Hibernate会自动根据映射关系将之转换为真正的SQL语句来执行。

什么?又一种SQL?不是说使用O/R Mapping就可以不写SQL了吗,怎么又多了一种SQL”??

当然不是这样了,之所以产生HQL,就是为了能够更加灵活更加面向对象地操作数据,而且你不应该把HQL当成一种新的SQL,因
为它——太简单好学了!

看看下面的HQL,是不是很熟悉??

selectp.NamefromPersonaspwherep.Id=1
selectNamefromPersonwhereAge>20
selectId,NamefromPersonwhereId>1andAge>20


认出来老兄弟了吧!!

(从这里开始,我们给person表添加了一个age列,请注意)

ok,我们这里就详细解释。

“from Person ”意思是取出Person类映射的person表中的所有记录,对应的SQL是:

Select * from person”

还可以加上别名:from Person (as) p = Select * from person (as) p

这样一解释就很清楚了吧!一句话,你便已经掌握了HQL50%

而“select Name from Person”,当然也就是只取person表的name列了!

你所知道的where中的andorislikebetween><=等等都可以直接拿来使用,

如下:

selectp.NamefromPersonpwherep.Age>20

fromPersonpwherep.Agebetween20and30

frompersonpwherep.Agein(20,30)

frompersonpwherep.Nameisnull

frompersonpwherep.Namelike“Jaki%

注意:字段大小写应该尽量跟属性名称保持一致,尤其是在使用别名的情况下,如:

p.age将会导致一个“无法解析属性age“的错误。但是在不使用别名的情况下我的机器上”age“和’Age“一样可以通过,虽然如此,
建议还是跟类文件保持一致。

执行HQL是通过IQuery来实现的,如下是详细的写法:

IQueryquery=session.CreateQuery(“fromPerson”);

IListlist
=query.List();


通过session来创建一个query,然后执行queryList方法,返回符合条件的IList

如上面的“from Person“,将返回person表的所有记录,list中将包含映射到Person

的对应表中所有记录的对象。

好了,这一篇就讲这么多,我们下次再接着练习。
任何建议或者批评,请eabluedog@163.com

分享到:
评论

相关推荐

    NHibernate Step by Step入门教程

    7. **查询**:NHibernate提供了HQL(Hibernate Query Language)和Criteria API两种方式来执行查询,HQL类似SQL但面向对象,Criteria API则允许动态构建查询。 8. **事务管理**:NHibernate支持.NET的...

    NHibernate HQL 条件查询

    在探讨NHibernate HQL条件查询时,我们首先要理解NHibernate框架以及HQL(Hibernate Query Language)的基本概念。NHibernate是一个开放源代码的对象关系映射(ORM)解决方案,它为.NET平台提供了一种将对象模型与...

    NHibernate Step by Step(教程).doc

    ### NHibernate Step by Step 教程知识点概览 #### 一、环境搭建与配置 - **NHibernate**:NHibernate 是一个开源的对象关系映射器(Object-Relational Mapper,ORM),它允许开发者以面向对象的方式操作关系型...

    NHibernate hql 可用函数,函数大全

    Query query = session.createQuery(hql); query.setString(0, id); Province p = (Province) query.list().get(0); session.delete(p); ``` - 方式二: ```java String hql = "DELETE FROM Province WHERE ...

    NHibernate中的Session示例源代码

    在NHibernate中,`Session`是一个核心概念,它是数据库会话的代理,负责对象的持久化操作。下面我们将深入探讨`Session`的工作原理以及相关的源代码知识。 首先,`Session`是NHibernate的接口`ISession`的实现,它...

    Summer of Nhibernate Session

    在这个项目中,开发者可以学习到如何配置NHibernate,设置映射文件,创建SessionFactory,打开和关闭Session,以及使用Criteria、HQL(Hibernate Query Language)或Lambda表达式进行查询。 学习《Summer of ...

    Linq2NHibernate.Step1

    var users = session.Query().ToList(); } ``` 7. **查询条件**: LINQ支持丰富的查询条件,比如筛选、排序、分页等。例如,获取名字为"John"的用户: ```csharp var user = session.Query() .Where(u =&gt; u...

    nhibernate

    ### NHibernate ORM详解:Session、Query与HQL NHibernate是一个强大的对象关系映射(ORM)框架,用于.NET平台上的数据库交互。它提供了一种在应用程序的业务逻辑层与底层数据库之间建立桥梁的方法,允许开发人员以...

    NHibernate_Demo

    7. **Criteria查询和HQL**:NHibernate提供了两种查询方式:Criteria API和HQL(Hibernate Query Language)。Criteria API允许开发者以对象方式构建查询,而HQL是一种面向对象的查询语言,类似于SQL但更贴近面向...

    NHibernate入门大全

    本篇将深入浅出地介绍NHibernate的基础概念、配置、使用方法,以及如何通过HQL(Hibernate Query Language)进行数据操作。 一、NHibernate基本概念 1. ORM(对象关系映射):ORM是一种编程技术,用于将关系数据库...

    Summer of Nhibernate Session 03 Code.zip

    《Nhibernate Session深度解析:夏日专题第三章代码实例》 在软件开发领域,ORM(对象关系映射)框架的使用已经变得越来越普遍,其中Nhibernate作为.NET平台上的一个强大工具,深受广大开发者喜爱。本篇将深入探讨...

    Nhibernate从入门到精通_初学实例

    Nhibernate 提供了自己的查询语言 HQL(Hibernate Query Language),类似于 SQL,但面向对象。HQL 支持复杂的查询,如联接、分组、排序等。例如,以下 HQL 查询获取所有用户: ```csharp var query = session....

    C# NHibernate 分页 HQL 源码

    使用vs2010打开解决方案。 把网站 App_Data 中的数据库附加一下。我这里用的是sql2008 SQLEXPRESS 修改Web.config 连接数据库配置 &lt;property name="connection.connection_string"&gt;Server=PC2011022315OVP\SQL...

    NHibernate

    4. **Querying**: 提供多种查询方式,如HQL(Hibernate Query Language)、Criteria API、Linq-to-NHibernate等。 5. **Transaction Management**: 处理事务,确保数据的一致性和完整性。 **开始使用NHibernate** ...

    nhibernate 增删改查

    4. **Query和HQL**:NHibernate提供了 Criteria API 和 HQL(Hibernate Query Language)进行复杂的查询操作。HQL是一种面向对象的查询语言,类似SQL但更贴近面向对象的思维。 5. **事务处理**:NHibernate支持自动...

    NHibernate文档及demo

    2. **查询语言**:HQL(Hibernate Query Language)是面向对象的查询语言,类似SQL,用于检索和更新持久化对象。 3. ** Criteria 查询**:提供了一种动态构建查询的方式,无需编写SQL,更符合面向对象编程的思想。 4...

    Summer of Nhibernate Session 02 Code

    《Nhibernate Session深度解析:夏季学习系列02代码篇》 在深入探讨Nhibernate Session这一关键概念之前,我们先理解一下Nhibernate本身。Nhibernate是一个流行的开源对象关系映射(ORM)框架,用于.NET平台。它...

    NHibernate 中文文档教程

    6. **查询**: NHibernate 提供了HQL(Hibernate Query Language)和Criteria API两种查询方式,它们允许用面向对象的方式表达查询,避免直接写SQL,提高了代码可读性和可维护性。 7. **懒加载(Lazy Loading)**: ...

Global site tag (gtag.js) - Google Analytics