询问情势,查询方式

在支付的历程中大家连年会凌驾多表操作的必要,明天笔者分享1个有关查询的形式,

在支付的长河中咱们连年会遭逢多表操作的供给,今日作者分享三个有关查询的法门,

序言:在利用NHibernate中,必要将用户表(Users)、部门表(Departments),链表查询,在网上找了大多素材,可以在配置文件中布署相应的习性达到关联的法力,壹对多、多对1、多对多的秘籍,不过选取后发觉有点困难,尤其时刚开始接触NHibernate,有点儿难领悟,现在自家利用壹种新的艺术,使用大家最熟稔的SQL来达成有关职能

前言:在选拔NHibernate中,须要将用户表(Users)、部门表(Departments),链表查询,在网上找了繁多质地,能够在安顿文件中配备相应的属性达到关联的机能,一对多、多对1、多对多的方法,但是利用后发现存点艰巨,特别时刚早先接触NHibernate,有点儿难驾驭,今后自个儿使用1种新的点子,使用大家最熟稔的SQL来产生相关作用

 

 

1.0 首先大家供给把条件安插好,请参考我眼下的小说,

一.0 首先大家必要把条件安顿好,请参考笔者眼前的小说,

二.0 我们在NHibernateSample中定义三个主意

二.0 我们在NHibernateSample中定义三个格局

图片 1图片 2

图片 3图片 4

/// <summary>
        /// 查询所有数据
        /// </summary>
        /// <returns></returns>
        public IList<Object> GetCustomers()
        {
            return Session.CreateSQLQuery("select  A.*,B.* from Users A ,Departments B WHERE A.Dept_id = B.dept_id")
                .AddEntity(typeof(Users)).AddEntity(typeof(Departments)).List<Object>();

            //return Session.QueryOver<MyDepartments>().List();
        }
/// <summary>
        /// 查询所有数据
        /// </summary>
        /// <returns></returns>
        public IList<Object> GetCustomers()
        {
            return Session.CreateSQLQuery("select  A.*,B.* from Users A ,Departments B WHERE A.Dept_id = B.dept_id")
                .AddEntity(typeof(Users)).AddEntity(typeof(Departments)).List<Object>();

            //return Session.QueryOver<MyDepartments>().List();
        }

询问艺术

查询格局

  

  

  正如上海教室所属我们选用了连表查询,
今年查询出来的结果是两张表的共用交集
包括全部的字段,随后我们在后头使用.AddEntity(typeof(Users)),NHibernateSample会在编写翻译的时候获得大家传入的门类,随即找到呼应的布置文件,依据布置文件相应的配置,就足以将我们的类中的字段和数据库查询结果的字段壹一对应
,然后生成对应的结果集,最终我们输出.List<Object>();
那样就获得了连表查询的结果,那么大家该如何使用它吧?重回出来的结果集又是何等体统的呢?

  正如上海教室所属大家利用了连表查询,
今年查询出来的结果是两张表的国有交集
包蕴全部的字段,随后我们在前面使用.AddEntity(typeof(Users)),NHibernateSample会在编写翻译的时候获得我们传入的体系,随即找到呼应的布置文件,依据安插文件相应的配置,就能够将大家的类中的字段和数据库查询结果的字段一壹对应
,然后生成对应的结果集,最终大家输出.List<Object>();
那样就收获了连表查询的结果,那么我们该怎么使用它吗?重返出来的结果集又是怎么着体统的吧?

 图片 5

 图片 6

 

 

回来出来的结果集的旗帜:NHibernateSample将数据库中的壹行数据对应到大家加以的实体类对象,由此集合中每一个指标又含有三个指标叁个是单位属性/值的聚合,另一个是用户属性/值的集聚 

回来出来的结果集的金科玉律:NHibernateSample将数据库中的壹行数据对应到大家加以的实体类对象,因而集合中每3个对象又含有四个目的三个是机构属性/值的集结,另五个是用户属性/值的联谊
 

图片 7

图片 8

 

 

该怎么样使用它
:手动的拼装重返的结果集

该怎么使用它
:手动的拼装再次回到的结果集

图片 9图片 10

图片 11图片 12

//创建一个操作类对象  这里还记得嘛?我们在NHibernateSample操作类的构造函数中声明了一个ISession的参数 这里我们调用帮助类的GetSession()方法返回一个ISession
            NHibernateSample _sample = new NHibernateSample(new NHibernateHelper().GetSession());


            //声明一个对象的集合  由于是多对一的关系 所以我在用户类中自定义了一个部门类型的属性字段
            List<Users> list_u = new List<Users>();

            //存放数据库返回的查询结果
            IList<Object> list_o = _sample.GetCustomers();

            //这里因为返回的是Object类型 所以只能用for循环 不能使用foreach
            for (int i = 0; i < list_o.Count; i++)
            {
                //获取集合中的对象
                Object[] isu_d = (Object[])_sample.GetCustomers()[i];

                //将当前对象中的第一个用户属性/值的对象集合插入到U对象中
                Users u = (Users)isu_d[0];

                //将当前对象中的第二个部门属性/值的对象集合插入到U对象的Departments(相应的部门类型属性 上面提到过的)中
                u.Departments = (Departments)isu_d[1];
                //添加到集合中
                list_u.Add(u);
            }
            //最后返回的就是 用户的集合list_u  在用户中的属性Departments包含了相对应的部门信息
            list_u.Count();
//创建一个操作类对象  这里还记得嘛?我们在NHibernateSample操作类的构造函数中声明了一个ISession的参数 这里我们调用帮助类的GetSession()方法返回一个ISession
            NHibernateSample _sample = new NHibernateSample(new NHibernateHelper().GetSession());


            //声明一个对象的集合  由于是多对一的关系 所以我在用户类中自定义了一个部门类型的属性字段
            List<Users> list_u = new List<Users>();

            //存放数据库返回的查询结果
            IList<Object> list_o = _sample.GetCustomers();

            //这里因为返回的是Object类型 所以只能用for循环 不能使用foreach
            for (int i = 0; i < list_o.Count; i++)
            {
                //获取集合中的对象
                Object[] isu_d = (Object[])_sample.GetCustomers()[i];

                //将当前对象中的第一个用户属性/值的对象集合插入到U对象中
                Users u = (Users)isu_d[0];

                //将当前对象中的第二个部门属性/值的对象集合插入到U对象的Departments(相应的部门类型属性 上面提到过的)中
                u.Departments = (Departments)isu_d[1];
                //添加到集合中
                list_u.Add(u);
            }
            //最后返回的就是 用户的集合list_u  在用户中的属性Departments包含了相对应的部门信息
            list_u.Count();

动用再次来到的结果集

应用再次来到的结果集

 

 

结束了———

结束了———