上篇文章简单介绍NHibernate之简单增删改查,本文将会简单介绍有关执行NHibernate的SQL、HQL及存储过程;

一:执行SQL语句实例,运用CreateSQLQuery方法

        public IList<SchoolModel> GetListBySql(){string strSql = "select * from T_School where studentNum>250";ISQLQuery sqlQuery = isession.CreateSQLQuery(strSql).AddEntity(typeof(SchoolModel));return sqlQuery.List<SchoolModel>();}

二:执行存储过程实例

2.1:首先定义一个存储过程,传入一个参数

Create PROCEDURE [dbo].[Pro_Hql] @StudentNum int
AS
BEGINselect * from T_School where studentNum>@StudentNum
END

2.2:引入using System.Data;using NHibernate.Engine命名空间,NHibernateHelper是帮助类返回SessionFactory;当然也可以通过它来执行SQL语句

        public IList<SchoolModel> GetListByProcedure(){IList<SchoolModel> list = new List<SchoolModel>();ISessionFactoryImplementor imp = (ISessionFactoryImplementor)new NHibernateHelper().GetSessionFactory();IDbConnection conn = imp.ConnectionProvider.GetConnection();IDbCommand cmd = imp.ConnectionProvider.GetConnection().CreateCommand();try{cmd.CommandText = "Pro_Hql";cmd.CommandType = System.Data.CommandType.StoredProcedure;IDbDataParameter parameter = cmd.CreateParameter();parameter.ParameterName = "StudentNum";parameter.Value = 250;cmd.Parameters.Add(parameter);cmd.Connection = conn;IDataReader read = cmd.ExecuteReader();while (read.Read()){SchoolModel model = new SchoolModel();model.ID = Guid.Parse(read.GetValue(0).ToString());model.SchoolName = read.GetValue(1).ToString();model.BuildDate = DateTime.Parse(read.GetValue(2).ToString());model.Address = read.GetValue(3).ToString();model.IsSenior = bool.Parse(read["IsSenior"].ToString());model.StudentNum = int.Parse(read["StudentNum"].ToString());list.Add(model);}}catch (Exception ex){}return list;}

三:执行HQL语句实例,此处用CreateQuery并设置参数用":",当然也可以拼接字符串;

        public IList<SchoolModel> GetListByHql(){//实体的名称跟属性大小写都要注意string hqlStr = "from SchoolModel c where c.StudentNum>:studentNum";return isession.CreateQuery(hqlStr).SetString("studentNum", "250").List<SchoolModel>();}

四:Nhibernate也支持Linq的查询功能,其在命名空间NHibernate.Linq;下面列出一些比较常见:

1、限制运算符

Where:筛选序列中的项目
WhereNot:反筛选序列中的项目

2、投影运算符

Select:创建部分序列的投影
SelectMany:创建部分序列的一对多投影

3、分区运算符(分页常用到)

Skip:返回跳过指定数目项目的序列
SkipWhile:返回跳过不满足表达式项目的序列
Take:返回具有指定数目项目的序列
TakeWhile:返回具有满足表达式项目的序列

4、排序运算符

OrderBy:以升序按值排列序列
OrderByDescending:以降序按值排列序列
ThenBy:升序排列已排序的序列
ThenByDescending:降序排列已排序的序列
Reverse:颠倒序列中项目的顺序(用于操作集合)

5、分组运算符

GroupBy:按指定分组方法对序列中的项目进行分组

6、设置运算符

Distinct:返回无重复项目的序列
Except:返回代表两个序列差集的序列(用于操作集合)
Intersect:返回代表两个序列交集的序列(用于操作集合)
Union:返回代表两个序列交集的序列(用于操作集合)

7、转换运算符

Cast:将序列中的元素转换成指定类型
OfType:筛选序列中指定类型的元素
ToArray:从序列返回一个数组
ToDictionary:从序列返回一个字典
ToList:从序列返回一个列表
ToLookup:从序列返回一个查询
ToSequence:返回一个IEnumerable序列

8、元素运算符

DefaultIfEmpty:为空序列创建默认元素(用于操作集合)
ElementAt:返回序列中指定索引的元素(用于操作集合)
ElementAtOrDefault:返回序列中指定索引的元素,或者如果索引超出范围,则返回默认值(用于操作集合)
First:返回序列中的第一个元素
FirstOrDefault:返回序列中的第一个元素,或者如果未找到元素,则返回默认值
Last:返回序列中的最后一个元素(用于操作集合)
LastOrDefault:返回序列中的最后一个元素,或者如果未找到元素,则返回默认值(用于操作集合)
Single:返回序列中的单个元素
SingleOrDefault:返回序列中的单个元素,或者如果未找到元素,则返回默认值

9、生成运算符

Empty:生成一个空序列
Range:生成一个指定范围的序列
Repeat:通过将某个项目重复指定次数来生成一个序列

10、限定符

All:确定序列中的所有项目是否满足某个条件
Any:确定序列中是否有任何项目满足条件
Contains:确定序列是否包含指定项目

11、聚合运算符

Aggregate:对序列执行一个自定义方法
Average:计算数值序列的平均值
Count:返回序列中的项目数(整数)
LongCount:返回序列中的项目数(长型)
Min:查找数字序列中的最小数
Max:查找数字序列中的最大数
Sum:汇总序列中的数字

12、连接运算符

Concat:将两个序列连成一个序列

13、联接运算符

GroupJoin:通过归组将两个序列联接在一起
Join:将两个序列从内部联接起来

        public IList<SchoolModel> GetSchoolList(){IList<SchoolModel> list = null;list = isession.QueryOver<SchoolModel>().List();return list;}public IList<SchoolModel> GetListByLinq(){IList<SchoolModel> list = isession.QueryOver<SchoolModel>().Where(m => m.IsSenior).List();return list;}/// <summary>/// 返回符合条件的第一条记录,当为空是,返回一个各属性为null的对应类型的对象/// </summary>/// <returns></returns>public SchoolModel GetModelByLinq(){SchoolModel model = isession.QueryOver<SchoolModel>().WhereNot(m => m.IsSenior).SingleOrDefault();if (model == null){return null;}return model;}/// <summary>/// 相当于WHERE/// </summary>/// <returns></returns>public IList<SchoolModel> GetListByLindAnd(){IList<SchoolModel> list = isession.QueryOver<SchoolModel>().And(m => m.StudentNum > 390).List();return list;}/// <summary>/// 相当于反WHERE/// </summary>/// <returns></returns>public IList<SchoolModel> GetListByLindAndNot(){IList<SchoolModel> list = isession.QueryOver<SchoolModel>().AndNot(m => m.StudentNum > 400).List();return list;}/// <summary>/// 增加限制条件/// </summary>/// <returns></returns>public IList<SchoolModel> GetListByLinqAndRestrictionOn(){IList<SchoolModel> list = isession.QueryOver<SchoolModel>().AndRestrictionOn(m => m.SchoolName).IsLike("踏浪", NHibernate.Criterion.MatchMode.Anywhere).List();return list;}/// <summary>/// 排序 升/// </summary>/// <returns></returns>public IList<SchoolModel> GetListOrderByAsc(){IList<SchoolModel> list = isession.QueryOver<SchoolModel>().OrderBy(m => m.StudentNum).Asc().List();return list;}/// <summary>/// 排序 降/// </summary>/// <returns></returns>public IList<SchoolModel> GetListOrderByDesc(){IList<SchoolModel> list = isession.QueryOver<SchoolModel>().OrderBy(m => m.StudentNum).Desc().List();return list;}/// <summary>/// 近回个数/// </summary>/// <returns></returns>public int GetListByLinqCount(){return isession.QueryOver<SchoolModel>().RowCount();}/// <summary>/// 这个东西与前面说的AdnRestrictionOn是一样的,也是可以添加条件啥乱七八糟的/// </summary>/// <returns></returns>public IList<SchoolModel> GetListByWhereRestritionOn(){int[] intList=new int[]{390,400};IList<SchoolModel> list = isession.QueryOver<SchoolModel>().WhereRestrictionOn(m => m.StudentNum).IsIn(intList).List();return list;}/// <summary>/// 跳过指定数量的记录/// </summary>/// <returns></returns>public IList<SchoolModel> GetListBySkip() {IList<SchoolModel> list = isession.QueryOver<SchoolModel>().Skip(5).List();return list;}/// <summary>/// 获取指定数量的记录,与Skip配合使用是经常用到的分页效果/// </summary>/// <returns></returns>public IList<SchoolModel> GetListByTake(){IList<SchoolModel> list = isession.QueryOver<SchoolModel>().Take(10).List();return list;}/// <summary>/// 告知NHibernate你想要查询的是什么东西 相当于select StudentNum from T_School/// </summary>/// <returns></returns>public IList<int> GetListBySelect(){IList<int> list = isession.QueryOver<SchoolModel>().Select(m => m.StudentNum).List<int>();return list;}/// <summary>/// Future()与List()的区别在于Future返回的是IEnumerable<>集合,而List()返回的是IList()/// </summary>/// <returns></returns>public IEnumerable<SchoolModel> GetEnumListByFuture(){IEnumerable<SchoolModel> list = isession.QueryOver<SchoolModel>().Where(m => m.SchoolName == "踏浪帅").Future();return list;}/// <summary>/// 返回最大值/// </summary>/// <returns></returns>public int GetByMax(){var StudentNumMax = (from m in GetSchoolList() select m.StudentNum).Max();return (int)StudentNumMax;}/// <summary>/// 返回最小值/// </summary>/// <returns></returns>public int GetBYMin(){var StudentNumMin = (from m in GetSchoolList() select m.StudentNum).Min();return (int)StudentNumMin;}/// <summary>/// 返回平均值/// </summary>/// <returns></returns>public int GetByAverage(){var StudentNumAverage = (from m in GetSchoolList() select m.StudentNum).Average();return (int)StudentNumAverage;}/// <summary>/// 返回所有的和/// </summary>/// <returns></returns>public int GetBySum(){var studentNumSum = (from m in GetSchoolList() select m.StudentNum).Sum();return (int)studentNumSum;}

转载:http://www.cnblogs.com/wujy/p/3581137.html

转载于:https://www.cnblogs.com/gusongbanyue/p/4632215.html

NHibernate初学二之简单执行SQL及HQL、Linq相关推荐

  1. PHP PDO学习(二) exec执行SQL

    exec 在一个单独的函数调用中执行一条 SQL 语句,返回受此语句影响的行数. exec 不会处理select语句 <?php try {$pdo = new PDO('mysql:host= ...

  2. NHibernate直接执行SQL进行插入

    有时候,需要用NHibernate直接执行SQL进行数据insert或update. 怎么写呢?简单一点的,可以直接拼凑出来的SQL,这样写: using NHibernate;StringBuild ...

  3. 用友NC二次开发小技巧:服务端执行SQL语句的方法

    大家好,今天给大家分享一下NC二次开发过程中的一个非常有用的小技巧:执行SQL语句. 我们在NC二开的过程中,经常需要直接查询数据库或者直接修改数据库表的字段值.这是一个非常简单并且通用的需求.下面给 ...

  4. 一条SQL要28秒 mysql_一条简单的 SQL 执行超过 1000ms,纳尼?

    阅读本文大概需要 2.8 分钟. MySQL 对我说 "Too young, too naive!" ▌大概过程 在测试环境 Docker 容器中,在跨进程调用服务的时候,A 应用 ...

  5. 一条简单的 SQL 执行超过1000ms,纳尼?

    作者:VipAugus https://juejin.im/post/5ce906a3e51d455a2f2201dc MySQL对我说"Too young, too naive!" ...

  6. java 与 SQL 的邂逅 之二 (简单话)

    简单,一如赤子之心,你的话我也许懂,我的话你也许也会懂吗? (1)预谋遇见 :java.sql.Connection. 上文中已经描述了Connection 的获取con = DriverManage ...

  7. openGauss简单查询SQL的执行流程解析

    目录 简单查询的执行 gdb调试 上一期酷哥分析了openGauss数据库的启动过程,包括主线程,辅助线程及业务处理线程的启动过程,这一期主要分析简单查询语句在业务处理线程Postgres上的执行流程 ...

  8. NHibernate初学体验记

    NHibernate 是一个基于.Net 的针对关系型数据库的对象持久化类库.NHibernate 来源于优秀的基于Java的关系型持久化工具Hibernate.NHibernate持久化你的.Net ...

  9. sparkSQL1.1入门之二:sparkSQL执行架构

    在介绍sparkSQL之前.我们首先来看看,传统的关系型数据库是怎么执行的.当我们提交了一个非常easy的查询: SELECT a1,a2,a3 FROM tableA Where condition ...

最新文章

  1. 腾讯开源分布式NoSQL存储系统DCache | 技术头条
  2. 2020年春季学期信号与系统课程作业参考答案-第十三次作业
  3. php abstract
  4. 关于Core Data的一些整理(一)
  5. SM01 事务代码的加锁以及解锁
  6. 循环体内,字符串的连接方式,使用StringBuilder的append方法进行扩展
  7. java 柱状图 宽度_Java实现 LeetCode 84 柱状图中最大得矩形
  8. 据说这是最受科研人员喜爱的春联
  9. 竖向图片插入_Word小技巧:让你的图片文字排版更有创意
  10. 了解自己计算机硬件设备信息
  11. 查找算法之四 斐波那契查找(C++版本)
  12. EF的注解Annotation和Fluent API
  13. pycharm搭建第一个django项目
  14. 【信号与系统】信号频谱和测量之汉明窗
  15. 1015 计算摄氏温度值
  16. vue项目中获取今天,昨天,明天时间方法
  17. 云呐|fsu动环监控维修,fsu动环监控单元是什么
  18. hadoop大数据生态集群
  19. 安卓项目查手机电量功能_安卓手机如何查电池使用寿命
  20. matlab模糊自适应pid控制仿真程序,模糊自适应整定PID控制matlab仿真程序(刘金锟-先进PID控制及其MATLAB仿真)...

热门文章

  1. fastDFS安装及配置
  2. windows环境运行MongoDB
  3. Power Designer反向获取数据库物理模型时Unable to list the users.
  4. 一个.Net Framework下的线程库
  5. 如何实现快速的diff工具(windiff, winmerge)?
  6. python __repr__方法_第8.13节 Python类中内置方法__repr__详解
  7. Kali Linux发布2020.1a版本
  8. PlayMaker GUI跟随布局的使用
  9. 多协议注入工具t50
  10. c4d完全学习手册_动态视觉设计就业班,全商业项目实训,一线制作团队10人小班授课,持续提升学习...