请注明转载地址:http://www.cnblogs.com/arhat

在上一章中,老魏带着大家学习了HQL语句,发现HQL语句还是非常不错的,尤其是在懒加载的时候,书写起来比较的舒服,但是这里老魏还得再次的说明一定要转换思想,HQL是对对象的查询,所以不应该还想着对表的操作,尤其是where条件中,更是把对对象的查询体现出来了。比如在本章,老魏接着和大家一起来讨论一下HQL语句。

根据上面的问题,我们来看看下面的查询是如何做的。请查询出位于班级号为1的学生的姓名和班级名称。我们更改一下主程序的代码如下:

static void Main(string[] args){//定义一个HQL语句string hql = "select SName,Clazz.CName from Student where Clazz.CId=?";//创建一个IQuery对象
NHibernate.IQuery query = DAL.NHibernateHelper.GetCurrentSession().CreateQuery(hql);query.SetParameter(0, 1);//执行IQuery对象,并把结果取出来

IList<object[]> list = query.List<object[]>();foreach (object[] objs in list){Console.WriteLine("姓名:" + objs[0] + ",性别:" + objs[1]);}}

我们来分析一下这个HQL语句:

select SName,Clazz.CName from Student where Clazz.CId=?

由于Student和Clazz之间的关系,我们在创建Student和Clazz对象的时候,就在Student中创建了一个关联的对象属性Clazz。那么现在我们要查询的是在班级为1中的学生的姓名和班级名称,那么我们应该查询的是Student对象,通过关联属相来指定要查询的字段。并在尤其在where中,通过关联的属性来制定要查询的条件CId。运行一下,看看结果。

这道题已经把NHibernate中的一些重要的知识点给体验出来了,所以再次强调HQL查询的是对象和对象的属性,所在在HQL中应该写的就是对象和对象的属性。

好,这是老魏上一章遗留下来的问题,那下面的内容就开始继续讲述HQL中的一些查询,在开始之前我们需要在Student表中插入一个Sage的字段并插入相关数据配合本章的查询。同时需要给Student.cs和Student.hbm.xml文件添加对象的属性。

1,between ... and

现在,老魏要查询一下年龄在30到50之间的学生信息。更改一下主程序:

static void Main(string[] args){//定义一个HQL语句string hql = "select SName,SAge from Student where SAge between 30 and 50";//创建一个IQuery对象
NHibernate.IQuery query = DAL.NHibernateHelper.GetCurrentSession().CreateQuery(hql);            //执行IQuery对象,并把结果取出来

IList<object[]> list = query.List<object[]>();foreach (object[] objs in list){Console.WriteLine("姓名:" + objs[0] + ",年龄:" + objs[1]);}}

2,order by

根据上面的结果,对结果进行一个根据年龄的大小从大到小排列数据

string hql = "select SName,SAge from Student where SAge between 30 and 50 order by SAge desc";

3,like 模糊查询

string hql = "select SName,SAge from Student where SName like '%济%'";

4,in和 not in

string hql = "select SName,SAge from Student where SAge in (33,25,18)";

string hql = "select SName,SAge from Student where SAge not in (33,25,18)";

5,聚合函数,AVG,Sum,Count

//定义一个HQL语句string hql = "select avg(SAge) from Student where SAge not in (33,25,18)";//创建一个IQuery对象
NHibernate.IQuery query = DAL.NHibernateHelper.GetCurrentSession().CreateQuery(hql);            //执行IQuery对象,并把结果取出来

IList<double> list = query.List<double>();foreach (double objs in list){Console.WriteLine("学生的平均年龄为:" + objs);}

至于SUM,Count这里老魏就不在演示了,大家可以自行测试。

6,group by 和 having语句

分别求出每个部门的总人数。

//定义一个HQL语句string hql = "select count(*),Clazz.CId from Student group by Clazz.CId";//创建一个IQuery对象
NHibernate.IQuery query = DAL.NHibernateHelper.GetCurrentSession().CreateQuery(hql);            //执行IQuery对象,并把结果取出来

IList<Object[]> list = query.List<Object[]>();foreach (Object[] objs in list){Console.WriteLine("班级:" + objs[1]+",总人数:"+objs[0]);}

求出总人数大于2的班级名称。

string hql = "select count(*),Clazz.CName from Student group by Clazz.CId having count(*) >2";

本章到这里基本上就差不多把基本的查询讲述完毕了,那么在下一章中,我们主要来阐述一下连接查询和子查询。

转载于:https://www.cnblogs.com/arhat/p/3576157.html

一步步学习NHibernate(8)——HQL查询(2)相关推荐

  1. Castle ActiveRecord学习实践(8)HQL查询

    本篇来了解下Castle ActiveRecord hql 查询语句. 博客园中讲解Castle ActiveRecord 的文章已经很多了,博主就不自己写了.转载一篇TerryLee大大的文章. 摘 ...

  2. dll文件懒加载_一步步学习NHibernate(5)——多对一,一对多,懒加载(2)

    请注明转载地址:http://www.cnblogs.com/arhat 通过上一章的学习,我们建立了Student和Clazz之间的关联属性,并从Student(many)的一方查看了Clazz的信 ...

  3. Hibernate 学习笔记(二)—— Hibernate HQL查询和 QBC 查询

    目录 一.Hibernate 的 HQL 查询 1.1.查询所有数据 1.2.条件查询 1.3.排序查询 1.4.统计查询 1.5.分页查询 1.6.投影查询 二.Hibernate 的 QBC 查询 ...

  4. Castle ActiveRecord学习实践(7):使用HQL查询

    摘要:虽然ActiveRecord为我们提供了Find()和FindAll()这样两个静态的查询方法,并且有Where特性可供使用,但是仍然不能解决实际开发中一些复杂的查询,这时我们就需要通过HQL查 ...

  5. NHibernate3剖析:Query篇之NHibernate.Linq标准查询

    本节内容 系列引入 NHibernate.Linq概述 标准查询运算符 结语 系列引入 NHibernate3.0剖析系列分别从Configuration篇.Mapping篇.Query篇.Sessi ...

  6. 一起谈.NET技术,NHibernate3.0剖析:Query篇之NHibernate.Linq标准查询

    系列引入 NHibernate3.0剖析系列分别从Configuration篇.Mapping篇.Query篇.Session策略篇.应用篇等方面全面揭示NHibernate3.0新特性和应用及其各种 ...

  7. NHibernate3.0剖析:Query篇之NHibernate.Linq标准查询

    系列引入 NHibernate3.0剖析系列分别从Configuration篇.Mapping篇.Query篇.Session策略篇.应用篇等方面全面揭示NHibernate3.0新特性和应用及其各种 ...

  8. mysql hql查询语句_查询hql语句

    Hibernate-HQL 了解HQL 一.HQL定义 1.Hibernate QueryLanguage,Hibernate查询语言 2.HQL是面向对象的查询语言 3.HQL提供了丰富灵活的查询特 ...

  9. 一步步学习EF Core(3.EF Core2.0路线图)

    前言 这几天一直在研究EF Core的官方文档,暂时没有发现什么比较新的和EF6.x差距比较大的东西.不过我倒是发现了EF Core的路线图更新了,下面我们就来看看 今天我们来看看最新的EF Core ...

最新文章

  1. VS.net下编写makefile文件--NMAKE用法
  2. [Python人工智能] 八.卷积神经网络CNN原理详解及TensorFlow编写CNN
  3. 微信小程序--数据存储
  4. 作者:​高晨旭(1990-),男,北京系统工程研究所研究实习员。
  5. 大数据分析优劣势有哪些
  6. oracle试图怎么使用,oracle 视图的介绍和使用
  7. 自留-Python:线性拟合(直线+曲线)
  8. Java中的命名规范总结
  9. 有趣的黑客网站 | 伪装成黑客高手,像电影黑客一样打字如飞
  10. Django:A server error occurred. Please contact the administrator.
  11. 有道云笔记分享_有道云笔记的使用分享
  12. ubuntu设置软件安装源为阿里云
  13. 字符0、数字0和‘\0’的区别
  14. webservice 实现与his系统对接_一键放牧,一架管 1000 头牛!以色列牧民用大疆无人机实现自主放牛;中国重汽对接北斗卫星导航系统,车辆定位精度达到厘米级别!...
  15. 平安的互联网布局新探索 平安天下通引领金融服务再升级
  16. C++捕获全屏(截全屏)
  17. android 9.0 10.0 去掉音量键+Power键组合键的屏幕截图功能
  18. Skeletal Animation(骨骼动画)
  19. [项目管理-33]:需求管理与范围管理的异同
  20. Source code does not match the bytecode

热门文章

  1. Socket I/O模型全接触
  2. 移动APP开发工作笔记002---Hbuilder js判断当前设备是安卓设备还是苹果设备
  3. Git工作笔记004---torisegit使用时Updates were rejected because the tip of your current branch i
  4. 昨天晚上的总结--人跟人的区别在于想的多少吧
  5. 正则表达式 判断 连号如“123456”、同号如“888888”、连同号如“112233”“222333”...
  6. 在ubuntu里烧win10安装盘
  7. leetcode437. 路径总和 III
  8. php sort函数,php中sort函数的功能起什么作用呢?
  9. ucc编译器(语义分析)
  10. 随想录(我们应该编写什么样的软件)