NHibernate系列学习(二)-使用sql和hql以及linq

1.本文主要介绍了NH的三种查询方式

2.界面查看

3.代码架构

4.代码详情

namespace KimismeDemo
{
    public partial class Form2 : Form
    {
        private ISession session;
        private ISessionFactory factory;
        private ITransaction trans;
        public Form2()
        {
            InitializeComponent();
        }

        #region 1.初始化NH - private void Form2_Load(object sender, EventArgs e)
        private void Form2_Load(object sender, EventArgs e)
        {
            Configuration config = new Configuration().AddAssembly("Kimisme");
            factory = config.BuildSessionFactory();
            session = factory.OpenSession();
            dgvList.AutoGenerateColumns = false;
        }
        #endregion

        #region 2.0 执行 sql语句 - private void tsmiExecuteSql_Click(object sender, EventArgs e)
        private void tsmiExecuteSql_Click(object sender, EventArgs e)
        {
            string strSql = "select * from T_Student where sId >1";
            ISQLQuery sqlQuery = session.CreateSQLQuery(strSql).AddEntity(typeof(Student));
            IList<Student> stuList = sqlQuery.List<Student>();
            dgvList.DataSource = stuList.ToList();
        }
        #endregion

        #region 3.0 执行存储过程 -  private void btnExecuteStoreProc_Click(object sender, EventArgs e)
        private void btnExecuteStoreProc_Click(object sender, EventArgs e)
        {
            trans = session.BeginTransaction();

            IList<Student> stuList = new List<Student>();
            ISessionFactoryImplementor imp = factory as ISessionFactoryImplementor;
            IDbConnection conn = imp.ConnectionProvider.GetConnection();
            IDbCommand cmd = imp.ConnectionProvider.GetConnection().CreateCommand();

            try
            {
                cmd.CommandText = "Pro_GetStudent";
                cmd.CommandType = CommandType.StoredProcedure;
                IDbDataParameter parameter = cmd.CreateParameter();
                parameter.ParameterName = "StudentId";
                parameter.Value = 4;
                cmd.Parameters.Add(parameter);
                cmd.Connection = conn;
                IDataReader read = cmd.ExecuteReader();
                while (read.Read())
                {
                    Student stu = new Student();
                    stu.Id = int.Parse(read.GetValue(0).ToString());
                    stu.Name = read.GetValue(1).ToString();
                    stu.Age = int.Parse(read.GetValue(2).ToString());
                    stuList.Add(stu);
                }
                trans.Commit();
                dgvList.DataSource = stuList.ToList();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
        #endregion

        #region 4.0 执行hql语句 -private void tsmiExecuteHql_Click(object sender, EventArgs e)
        private void tsmiExecuteHql_Click(object sender, EventArgs e)
        {
            string strHql = "from Student stu where stu.Id >:stuId";
            IList<Student> stuList = session.CreateQuery(strHql).SetInt32("stuId", 7).List<Student>();
            dgvList.DataSource = stuList.ToList();
        }
        #endregion

        #region 5.0 执行linq语句-聚合函数  - Max
        private void tsmiMax_Click(object sender, EventArgs e)
        {
            var stuList = session.QueryOver<Student>().Where(s => s.Id > 0).List();
            int maxAge = (from s in stuList select s.Age).Max();
            MessageBox.Show(maxAge.ToString());
        }
        #endregion

        #region 5.1 执行linq语句-聚合函数  - Min
        private void tsmiMin_Click(object sender, EventArgs e)
        {
            var stuList = session.QueryOver<Student>().Where(s => s.Id > 0).List();
            int minAge = (from s in stuList select s.Age).Min();
            MessageBox.Show(minAge.ToString());
        }
        #endregion

        #region 5.2执行linq语句-聚合函数  - Avg
        private void tsmiAvg_Click(object sender, EventArgs e)
        {
            var stuList = session.QueryOver<Student>().Where(s => s.Id > 0).List();
            double avgAge = (from s in stuList select s.Age).Average();
            MessageBox.Show(avgAge.ToString());
        }
        #endregion

        #region 5.3执行linq语句-聚合函数  - Sum
        private void tsmiSum_Click(object sender, EventArgs e)
        {
            var stuList = session.QueryOver<Student>().Where(s => s.Id > 0).List();
            int sumAge = (from s in stuList select s.Age).Sum();
            MessageBox.Show(sumAge.ToString());
        }
        #endregion

        #region 5.4 执行linq语句-聚合函数  - Count
        private void tsmiCount_Click(object sender, EventArgs e)
        {
            var stuList = session.QueryOver<Student>().Where(s => s.Id > 0).List();
            int countAge = (from s in stuList select s.Age).Count();
            MessageBox.Show(countAge.ToString());
        }
        #endregion

    }
}

5.代码下载

下载地址

时间: 2024-12-19 11:48:42

NHibernate系列学习(二)-使用sql和hql以及linq的相关文章

Nhibernate系列学习之(三) Criteria查询表达式增删改查

Criteria查询表达式: 正如我们所见,Expression对查询语句的表达式进行了封装和限制,下表列出了Expression所有的方法,以及每个方法所对应的查询表达式及其限制. Restrictions的用法: 方法 说明 Restrictions.eq = Restrictions.allEq 利用Map来进行多个等于的限制 Restrictions.gt > Restrictions.ge >= Restrictions.lt < Restrictions.le <= R

Nhibernate系列学习之(一) ORM and Nhibernate入门实例解析

最近框架项目需要,数据层想使用Nhibernate,代替传统的sql语句的写法,更加使用面向对象的思维来维护实体与数据库的这层关系映射(ORM),好在之前接触过Java时学习使用了Hibernate,先来了解ORM.    什么是ORM? 对象-关系映射(Object/Relation Mapping,简称ORM),是随着面向对象的软件开发方法发展而产生的.面向对象的开发方法是当今企业级应用开发环境中的主流开发方法,关系数据库是企业级应用环境中永久存放数据的主流数据存储系统.对象和关系数据是业务

paip.取当天记录的方法sql跟hql hibernate

#------两个方法...函数法和日期计算法.. 函数法: DATEDIFF(d,createTime,GETDATE())=0   //d指定为day hb也有一样的函数.. 日期 计算法: where  createTime>='2014-5-4 00:00:01' and createTime<='2014-5-4 23:59:59' where  createTime='2014-5-4 00:00:00' 应该优先使用日期 计算法,,因为这个方法能使用索引了...不个日期时间转换为

Azure云平台学习之路(二)——SQL Database

1.什么是SQL Database? 托管关系数据库,数据库即服务,IaaS的一种. 2.有哪些特点? (1)为SaaS应用提供可扩展的数据存储服务. (2)易于操作大量的数据库.稍后介绍几种操作数据库的方法. (3)性能更高,稳定性更好.基于Azure平台,高性能可扩展:多地区容灾备份. (4)接近0维护,无需维护其他硬件设备. (5)支持熟悉的功能.工具和平台. (6)安全和审核功能. 3.使用的企业有: 4.创建一个数据库. (1)进入https://manage.windowsazure

ORM利器:NHibernate(二)使用CodeSmith快速生成映射文件和映射类

    在上一篇文章<ORM利器:NHibernate(一)简介>,我们对NHibernate做了简要介绍,接下来的系列文章将以Demo的形式和大家分享使用NHibernate的初步使用. 一 CodeSmith简介 本文以表自动生成NHibernate的映射文件和映射类的实例来说明一下本软件的使用方法.     CodeSmith是一种基于模板的代码生成工具,其使用类似于ASP.NET的语法来生成任意类型的代码和文件.使用 CodeSmith,可以生成包括简单的强类型集合和完整应用程序在内的

SQL、HQL、JPQL、CQL的对比

SQL:全称结构化查询语言(Structured Query Language),是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询.更新和管理关系数据库系统:同时也是数据库脚本文件的扩展名. HQL:HQL(Hibernate Query Language)查询相对于Criteria查询提供了更加丰富的和灵活的查询特性,因此Hibernate将HQL查询方式立为官方推荐的标准查询方式,HQL查询在涵盖Criteria查询的所有功能的前提下,提供了类似标准SQL语句的

SQL语句对应的LINQ和Lambda语句

1. 查询Student表中的所有记录的Sname.Ssex和Class列.select sname,ssex,class from studentLinq:    from s in Students    select new {        s.SNAME,        s.SSEX,        s.CLASS    }Lambda:    Students.Select( s => new {        SNAME = s.SNAME,SSEX = s.SSEX,CLASS 

LINQ to SQL 系列 如何使用LINQ to SQL插入、修改、删除数据

LINQ to SQL 系列 如何使用LINQ to SQL插入.修改.删除数据 http://www.cnblogs.com/yukaizhao/archive/2010/05/13/linq_to_sql_1.html http://blog.csdn.net/pan_junbiao/article/details/7015633 http://blog.sina.com.cn/s/blog_95cfa64601019vs1.html

NHibernate应用二:第一个NHibernate程序

当前期工作都准备完成后,将开始NHibernate的学习过程,而在第一个NHibernate程序中,将实现通过NHibernate根据客户编号对客户表进行单条记录的查询示例.该示例中,我们将按以下几部分说明.  一.结构分析 1.分层    习惯了分层的体系结构,所以将第一个NHibernate程序按以下方式进行分层 说明: A.Model层:模型层,是最底层,类似于传统三层中的实体层,用于持久化类和O/R Mapping操作. B.DAL层:DataAccessLayer层,高于Model层而