使用NHibernate(6)-- HQL && ICriteria 简单介绍
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 简单介绍的更多相关文章
- HQL语句简单介绍
HQL查询:Criteria查询对查询条件进行了面向对象封装,符合编程人员的思维方式,不过HQL(Hibernate Query Lanaguage)查询提供了更加丰富的和灵活的查询特性,因此 Hib ...
- NHibernate初学二之简单执行SQL及HQL、Linq
上篇文章简单介绍NHibernate之简单增删改查,本文将会简单介绍有关执行NHibernate的SQL.HQL及存储过程: 一:执行SQL语句实例,运用CreateSQLQuery方法 public ...
- [转]NHibernate之旅(3):探索查询之NHibernate查询语言(HQL)
本节内容 NHibernate中的查询方法 NHibernate查询语言(HQL) 1.from子句 2.select子句 3.where子句 4.order by子句 5.group by子句 实例 ...
- hibernate 教程(3)—NHibernate查询语言HQL
NHibernate之旅(3):探索查询之NHibernate查询语言(HQL) 本节内容 NHibernate中的查询方法 NHibernate查询语言(HQL) 1.from子句 2.select ...
- Hibernate学习(1)简单介绍
1.什么是Hibernate? 首先,Hibernate是数据持久层的一个轻量级框架.数据持久层的框架有非常多比方:iBATIS,myBatis,Nhibernate,Siena等 ...
- NHibernate之旅(3):探索查询之NHibernate查询语言(HQL)
本节内容 NHibernate中的查询方法 NHibernate查询语言(HQL) 1.from子句 2.select子句 3.where子句 4.order by子句 5.group by子句 实例 ...
- SQLite数据库和JPA简单介绍
SQLite数据库和JPA简单介绍 一.SQLite简单使用 SQLite是遵循ACID的关系数据库管理系统,它的处理速度很快,它的设计目标是嵌入式的,只需要几百K的内存就可以了. 1.下载SQLit ...
- 简单介绍几种Java后台开发常用框架组合
01 前言 Java框架一直以来都是面试必备的知识点,而掌握Java框架,不管在成熟的大公司,快速发展的公司,还是创业阶段的公司,都能对当前正在开发中的系统有整体的认知,从而更好的熟悉和学习技术,这篇 ...
- [原创]关于mybatis中一级缓存和二级缓存的简单介绍
关于mybatis中一级缓存和二级缓存的简单介绍 mybatis的一级缓存: MyBatis会在表示会话的SqlSession对象中建立一个简单的缓存,将每次查询到的结果结果缓存起来,当下次查询的时候 ...
随机推荐
- win2003 ent 64 + mssql ent 64
1.打win2003补丁(取消IE8.0)2.msconfig->boot.int->高级中,将内核改成83.将cd1,cd2,高到Servers,Tools目录中,并保证Servers, ...
- C# WebApi 过滤器的使用开发接口必备利器
在WEB Api中,引入了面向切面编程(AOP)的思想,在某些特定的位置可以插入特定的Filter进行过程拦截处理.引入了这一机制可以更好地践行DRY(Don’t Repeat Yourself)思想 ...
- ZSTU4266 回文 2017-03-22 14:25 55人阅读 评论(0) 收藏
4266: 回文 Time Limit: 1 Sec Memory Limit: 128 MB Submit: 1636 Solved: 504 Description 小王想知道一个字符串是否为 ...
- HRBUST1212 乘积最大 2017-03-06 15:47 59人阅读 评论(0) 收藏
乘积最大 今年是国际数学联盟确定的"2000--世界数学年",又恰逢我国著名数学家华罗庚先生诞辰90周年.在华罗庚先生的家乡江苏金坛,组织了一场别开生面的数学智力竞赛的活动,你的一 ...
- 深夜配置一把struts2
在intellij idea里面配置出来了struts2的一个Helloworld,因为换了工具,在网上查了很多关于IDEA配置它的方式,好多是用Maven解决依赖关系的.于是按照网上的来,发现很多东 ...
- MSP430 G2553 LaunchPad设置GPIO
一. 背景知识:逻辑运算符的使用 当程序初始化时,对于复位状态有不确定性的寄存器(如PxOUT),建议采用直接赋值:其他情况下最好使用逻辑运算符修改寄存器. 直接赋值 REGISTER = 0b111 ...
- /usr/bin/curl: Argument list too long的解决方法
使用curl发送http请求时,会出现-bash: /usr/bin/curl: Argument list too long的错误,此时,可用采用httpie代替curl发送请求: pip inst ...
- sql查询优化--数字转换字符串字段
SELECT top 1 pt.* FROM t1where id='20180731223014' SELECT top 1 pt.* FROM t1where id='0180731223014 ...
- Python 错误和异常小结
1.Python异常类 Python是面向对象语言,所以程序抛出的异常也是类.常见的Python异常有以下几个,大家只要大致扫一眼,有个映像,等到编程的时候,相信大家肯定会不只一次跟他们照面(除非你不 ...
- 修改 Cloud image 的密码的简单方法
下载工具: yum -y install libguestfs-tools.noarch 打开DEBUG: export LIBGUESTFS_DEBUG=1 LIBGUESTFS_TRACE=1 ...