1,HQL。

HQL是NHibernate特有的查询方式,早先的java语法还没有类似Linq的Jinq,所以Hibernate就弄了一套自己的查询语言,NHibernate移植的时候把这种语言也一块儿移植过来了。这是一种和Sql差不多的语言,不同的是查询中的字段和实体名保持一致,而不是和数据库表列名保持一致。

下面的例子还是在之前那个小程序的基础上演示:

public User GetUserByName(string name)
{
var hql = @"select u from User u where u.Name=:name ";
return session.CreateQuery(hql).SetString("name",name);
}

这个示例从NH_User表中查找出指定名称的User。可以看到我们的hql语言中写的是User,而不是NH_User。另外,因为此处要查询的是一整个实体,所以可以简写成“from User u where u.Name=:name”。最后通过Session的CreateQuery方法创建一个查询,并给参数赋值。

类似的还支持 inner join,where,order by,group by,and or,delete,甚至是sql中的聚合函数sum等。

在来个批量删除的例子:

Session.CreateQuery("delete from User where Id> :Id")
.SetInt64("Id", id)
.ExecuteUpdate();

以下截图来自《Working with NHibernate 3.0》

2,ICriteria。

ICriteria是NHibernate标准查询接口。

先看一段原始的ICriteria查询:

ICriteria criteria = Session.CreateCriteria<User>(“u”)
.SetProjection(Projections.ProjectionList()
.Add(Projections.Property(“u.Id”))
.Add(Projections.Property(“u.Name”));

对应的sql语句如下:

select u.Id,u.Name from User u

从上面的查询可以看出ICriterria用起来是非常麻烦的,于是NHibernate3.0之后对ICriteria进行了扩展,添加了QueryOver方法,使用起来和linq+lambda的方式差不多。下面是使用QueryOver方法的示例:

Session.QueryOver<User>().where(u=>u.Id>3).OrderBy(u=>u.Name).List();

类似where方法,还支持Inner.JoinQueryOver<T>、SingleOrDefault等和linq非常相似的方法。

下图来自《Working with NHibernate3.0》

3,另外还有综合查询(MultiQuery)和命名查询(Name Queries),不常用,所以不打算介绍。

Futures查询在上一篇linq to Nhibernate中已经介绍,HQL和ICriteria中也有相同的使用方法。

使用NHibernate(6)-- HQL && ICriteria 简单介绍的更多相关文章

  1. HQL语句简单介绍

    HQL查询:Criteria查询对查询条件进行了面向对象封装,符合编程人员的思维方式,不过HQL(Hibernate Query Lanaguage)查询提供了更加丰富的和灵活的查询特性,因此 Hib ...

  2. NHibernate初学二之简单执行SQL及HQL、Linq

    上篇文章简单介绍NHibernate之简单增删改查,本文将会简单介绍有关执行NHibernate的SQL.HQL及存储过程: 一:执行SQL语句实例,运用CreateSQLQuery方法 public ...

  3. [转]NHibernate之旅(3):探索查询之NHibernate查询语言(HQL)

    本节内容 NHibernate中的查询方法 NHibernate查询语言(HQL) 1.from子句 2.select子句 3.where子句 4.order by子句 5.group by子句 实例 ...

  4. hibernate 教程(3)—NHibernate查询语言HQL

    NHibernate之旅(3):探索查询之NHibernate查询语言(HQL) 本节内容 NHibernate中的查询方法 NHibernate查询语言(HQL) 1.from子句 2.select ...

  5. Hibernate学习(1)简单介绍

    1.什么是Hibernate?           首先,Hibernate是数据持久层的一个轻量级框架.数据持久层的框架有非常多比方:iBATIS,myBatis,Nhibernate,Siena等 ...

  6. NHibernate之旅(3):探索查询之NHibernate查询语言(HQL)

    本节内容 NHibernate中的查询方法 NHibernate查询语言(HQL) 1.from子句 2.select子句 3.where子句 4.order by子句 5.group by子句 实例 ...

  7. SQLite数据库和JPA简单介绍

    SQLite数据库和JPA简单介绍 一.SQLite简单使用 SQLite是遵循ACID的关系数据库管理系统,它的处理速度很快,它的设计目标是嵌入式的,只需要几百K的内存就可以了. 1.下载SQLit ...

  8. 简单介绍几种Java后台开发常用框架组合

    01 前言 Java框架一直以来都是面试必备的知识点,而掌握Java框架,不管在成熟的大公司,快速发展的公司,还是创业阶段的公司,都能对当前正在开发中的系统有整体的认知,从而更好的熟悉和学习技术,这篇 ...

  9. [原创]关于mybatis中一级缓存和二级缓存的简单介绍

    关于mybatis中一级缓存和二级缓存的简单介绍 mybatis的一级缓存: MyBatis会在表示会话的SqlSession对象中建立一个简单的缓存,将每次查询到的结果结果缓存起来,当下次查询的时候 ...

随机推荐

  1. .NET基础 (19)多线程

    多线程编程的基本概念1 请解释操作系统层面上的线程和进程2 多线程程序在操作系统里是并行执行的吗3 什么是纤程 .NET中的多线程1 如何在.NET程序中手动控制多个线程2 如何使用.NET的线程池3 ...

  2. 通过 cygwin64 自己编译对应的 Tera Term cyglaunch.exe

    步骤如下: 将 cygterm+.tar.gz解压到任意目录,当然要cygwin容易操作.(本例直接放到$HOME目录下,启动cygwin后的默认目录,如果之前没有更改的话) 将 Makefile 中 ...

  3. solr-4.10.2版本使用tomcat7部署

    当前版本仅限于solr-4.10.2版本.默认环境使用的是jdk1.7,tomcat7.环境自己配置.网上一堆堆的. 1.下载相应的文件(solr-4.10.2.zip). 官网地址:http://l ...

  4. [javascript][翻译]使用javascript添加css rule

    来杭一周,收获很多,成长很多. 周六在搞一个插件的时候碰到需要动态添加伪元素的需求,搜了一下解决方案,有人用正则写出了读取伪元素的函数:我觉得倒是可以通过注入css rule的方式,来让预留有某些类的 ...

  5. oracle 11gr2 2.04 em 更改 hostname 后无需重建资料库的方法

    1) 备份删除$ORACKE_HOME/ xxxx-sid 的EM目录:复制要创建的xxx-sid EM 名称目录: 备份删除$ORACKE_HOME/oc4j/j2ee/ xxxx-sid 的EM目 ...

  6. yum初识

    yum仓库中的元数据文件: primary.xml.gz 所有RPM包的列表: 依赖关系: 每个RPM安装生成的文件列表: filelists.xml.gz 当前仓库中所有RPM包的所有文件列表: o ...

  7. xml写入

    XmlDocument xmlDocument=new XmlDocument(); XmlElement root = xmlDocument.CreateElement("", ...

  8. JaveScript初学-基础语法

    一.JavaScript数据类型 JavaScript中,一切皆对象. JavaScript拥有动态类型,使用var关键字(也可以不必)进行声明——字符串.数字.布尔.对象.Null.Undefine ...

  9. indows 2008 r2/做了SPS2007---2013后,发现添加原来域中的域组添加不上

    根据上次的网络包的分析, 我们在AD中找到了wtc-beijing-it的组, 不过在SharePoint日志中我们没有发现搜索成功的记录. - SearchResultEntry: CN=WTC-B ...

  10. SQL语句优化 (一) (52)

    优化SQL语句的一般步骤 1 通过show status命令了解各种SQL的执行频率. 格式:mysql> show [session|global]status; 其中:session(默认) ...