跟我学 NHibernate (二)

1. 在 NHibernate 中使用事务, 主要代码如下:

        #region 事务



        public IList<Customer> GetAll()
        {
            // 开启事物
            using (ITransaction tx = _session.BeginTransaction())
            {
                try
                {
                    //提交事务
                    tx.Commit();
                    return null;

                }
                catch (HibernateException ex)
                {
                  // 回滚事务
                    tx.Rollback();
                   throw ex ;
                }

            }
        }



        #endregion

 2. 使用N NHibernate 进行CRUD 操作

 

      #region  添加、 删除、更新对象


       


        public int Add(Customer model)
        {



         int id =(int) _session.Save(model);
         _session.Flush();

         return id;
        }





        public void Delete ( Customer model)
        {

             _session.Delete(model);

             _session.Flush();

        }


        public void Update( Customer model)
        {
          // 更新
           _session.Update(model);

           // 更新或保存 •检查这个对象是否已经存在Session中。如果对象不在,调用Save(object)来保存。如果对象存在,检查这个对象是否改变了。 如果对象改变,调用Update(object)来更新。

           //_session.SaveOrUpdate(model);

           _session.Flush();

        }

        #endregion

 3. 带条件的查询

     #region 条件查询 (Criteria Query)

        // 创建 Criteria 实例 使用ISession接口的CreateCriteria方法创建了NHibernate.ICriteria接口一个特定的持久化类的查询实例,也可以说ISession是用来制造Criteria实例的工厂
        public IList<Customer> Creater()
        {
        
           ICriteria cria = _session.CreateCriteria(typeof(Customer));

           cria.SetMaxResults(50);

           IList<Customer> list = cria.List<Customer>();

           return list;
          
        }


        // 结果集限制数据 
        //使用ICriteria接口提供的Add方法添加Restrictions类中约束表达式可以限制一些结果集的作用。
        public IList<Customer> Norrawing()
        {

         IList<Customer> customers = _session.CreateCriteria(typeof(Customer))
                                       .Add(Restrictions.Like("FirstName","y%"))// 查询 FirstName like  y%
                                       .Add(Restrictions.Eq("FirstName", "yang "))  // 查询 FirstName=Yang
                                       .Add(Restrictions.Between("LastName","%m","_n")) // 查询 LastName between %m _n
                                       .List<Customer>();

           return customers;

        }


        // 结果集排序
        // 使用ICriteria.Order对结果集排序,第二个参数true代表asc,false代表desc。例如下面例子查询Customer对象按FirstName降序、Lastname升序。
         public IList<Customer> Orderss()
        {

           IList<Customer> customers = _session.CreateCriteria(typeof(Customer))
                                       .Add(Restrictions.Like("FristName","yangming"))
                                       .AddOrder(new Order("FirstName",false))  /// FirstName  降序排序
                                       .AddOrder(new Order("LastName",true))  // LastName 升序排序
                                       .List<Customer>();

          return customers;

        }

        /*
         * 条件查询同样支持关联查询、动态关联抓取(在介绍一对多,多对多关系中阐述),投影、聚合和分组,离线(detached)查询和子查询是2.0版新增加的内容
         * */


         // 根据 示例查询(Query By Example) 

         //根据示例查询(QBE,Query By Example)是条件查询的一种特殊情况,NHibernate.Criterion.Example类根据你指定的实例创造查询条件。其典型的用法:创建一个Example实例;在Example实例上设置值;根据Example和设置NHibernate返回其对象集合。

         public IList<Customer> Query()
         {

            Customer customer = new Customer { Firstname="yangyang", Lastname="wang"};

            return _session.CreateCriteria(typeof(Customer))
             .Add(Example.Create(customer))
             .List<Customer>();


         }


         //可以自行调整Example使之更实用:
         public IList<Customer> Query(Customer customer)
         {

            Example exa = Example.Create(customer)
             .IgnoreCase()
             .EnableLike()
             .SetEscapeCharacter(‘&‘);

             return _session.CreateCriteria(typeof(Customer))
             .Add(exa)
             .List<Customer>();


         }

        #endregion

        #region 查询  NHibernate查询语言(HQL)

        public IList<Customer> ListAll()
         {

           return _session.CreateCriteria(" from Customer ")
           .List<Customer>();

         }


         public IList<Customer> ListAll2()
        {

          return _session.CreateCriteria(" From Customer as c ")
          .List<Customer>();

          // group by 子句
          //return _session.CreateCriteria("select * from Customer group by  firstname ")
          //.List<Customer>();


         // distinct 子句
   //       return _session.CreateQuery("select distinct c.Firstname from Customer c")
   //.List<Customer>();

           // where 子句

          //return _session.CreateQuery("from Customer c where c.Firstname=‘YJing‘")
          // .List<Customer>();



           // 带参数的 where 子句
    //       // return _session.CreateQuery("from Customer c where c.CustomerId > :cid")
    //.SetInt32("cid", 1)
    //.List<Customer>();

        }

        #endregion

 3. 用 NHibernate 进行分页查询

        #region  分页查询

         ISessionFactory SessionFactory;

         // 分页功能
         public IList<Customer> GetAll(int currentPage, int pageSize)
         {
             // 获取当前 session
             ISession curSession = SessionFactory.GetCurrentSession();

             ICriteria cria = _session.CreateCriteria(typeof(Customer));

             // 分页
             var model = cria.SetFetchSize(pageSize).SetFirstResult(currentPage).List<Customer>();


             return model;

         }



          // 分页查询 
         //在Nhibernate里实现分页用 SetFirstResult 和SetMaxResults实现,SetFirstResult 简单的理解就是从第几条记录开始,SetMaxResults是取几条记录
         private IList<Customer> GetRecord(IList<ICriterion> queryConditions, int pageIndex, int pageSize, string orderField, bool isAscending)
         {

             ICriteria criteria = _session.CreateCriteria(typeof(Customer));

             foreach (ICriterion cri in queryConditions)
             {

                 criteria.Add(cri);

             }


           

             //记录总数
             int skipCount = (pageIndex - 1) * pageSize;

             criteria.AddOrder(new Order(orderField, isAscending));

             criteria.SetFirstResult(skipCount).SetMaxResults(pageSize);

             return criteria.List<Customer>();


             //SQL查询
             //IList<Customer> customerList = Session.CreateSQLQuery("SELECT * FROM Customer")
             //    .SetFirstResult(pageStart*pageLimit)
             //    .SetMaxResults(pageLimit)
             //    .SetResultTransformer(Transformers.AliasToBean<Customer>()).List<Customer>(); 
             //return customerList;


             IList<Customer> customers = _session.CreateSQLQuery("")
             .SetFirstResult(pageIndex * pageSize)
             .SetMaxResults(pageSize)
             .SetResultTransformer (NHibernate.Transform.Transformers.AliasToBean<Customer>()).List<Customer>();


             return customers;
         } 




        #endregion

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。