zoukankan      html  css  js  c++  java
  • ORM Nhibernet 框架的 CRUD 操作

      Nhibernet 的基本语法:

     private ISession _session;
            public ISession Session
            {
                set
                {
                    _session = value;
                }
            }
            public QueryCriteriaAPI(ISession session)
            {
                _session = session;
            }
    
    
            #region 语法学习
            /// <summary>
            /// 创建ICriteria实例
            /// </summary>
            /// <returns></returns>
            public IList<Customer> CreateCriteria()
            {
                //NHibernate.ICriteria这个接口代表对一个特定的持久化类的查询。
                //ISession是用来制造Criteria实例的工厂。
                var crit = _session.CreateCriteria(typeof(Customer));
                crit.SetMaxResults(50);
                var customers = crit.List<Customer>();
                return customers;
            }
            /// <summary>
            /// 缩小结果集范围
            /// </summary>
            /// <returns></returns>
            public IList<Customer> Narrowing()
            {
                //一个查询条件(Criterion)是NHibernate.ICriterion接口的一个实例。
                //类NHibernate.Expression.Expression定义了获得一些内置的ICriterion类型的工厂方法。
    
                var customers = _session.CreateCriteria(typeof(Customer))
                    .Add(Restrictions.Like("Firstname", "YJing%"))
                    .Add(Restrictions.Between("Lastname", "A%", "Y%"))
                    .List<Customer>();
    
                //表达式(Expressions)可以按照逻辑分组
                //IList<Customer> customers = _session.CreateCriteria(typeof(Customer))
                //    .Add(Restrictions.Like("Firstname", "YJ%"))
                //    .Add(Restrictions.Or(
                //    Restrictions.Eq("Lastname", "L%"),
                //    Restrictions.IsNull("Lastname")
                //    ))
                //    .List<Customer>();
    
                //IList<Customer> customers = _session.CreateCriteria(typeof(Customer))
                //    .Add(Restrictions.In("Firstname", new string[] { "YJing", "YJingLee", "Y" }))
                //    .Add(Restrictions.Disjunction()
                //    .Add(Restrictions.IsNull("Lastname"))
                //    .Add(Restrictions.Eq("Lastname", "Lee"))
                //    .Add(Restrictions.Eq("Lastname", "xyz"))
                //    ).List<Customer>();
    
                //预制的条件类型(Expression的子类)。可以直接嵌入SQL。
                //{alias}是一个占位符,它将会被所查询实体的行别名所替代
                //Parameter paramName = new Parameter("someName", new StringSqlType());
                //IList<Customer> customers = _session.CreateCriteria(typeof(Customer))
                //    .Add(Expression.Sql(
                //      new SqlString(new object[]{
                //          "lower({alias}.Lastname) like lower(","Lastname",")"}), "YJing%", NHibernateUtil.String))
                //          .List<Customer>();
                return customers;
            }
            /// <summary>
            /// 排序Order by
            /// </summary>
            /// <returns></returns>
            public IList<Customer> Order()
            {
                //使用ICriteria.Order对结果集排序,true=asc,false=desc
                return _session.CreateCriteria(typeof(Customer))
                    .Add(Restrictions.Like("Firstname", "Y%"))
                    .AddOrder(new NHibernate.Criterion.Order("Lastname", true))
                    .AddOrder(new NHibernate.Criterion.Order("Firstname", false))
                    .List<Customer>();
            }
            #endregion
    
            #region 实例学习
            /// <summary>
            /// 利用CriteriaAPI按Firstname查询顾客
            /// </summary>
            /// <param name="firstname"></param>
            /// <returns>顾客列表</returns>
            public IList<Customer> UseCriteriaAPI_GetCustomersByFirstname(string firstname)
            {
                //NHibernate1.2写法
                //return _session.CreateCriteria(typeof(Customer))
                //    .Add(new NHibernate.Expression.EqExpression("Firstname", firstname))
                //    .List<Customer>();
    
                //NHibernate2.0写法
                //return _session.CreateCriteria(typeof(Customer))
                //    .Add(Expression.Eq("Firstname", firstname))
                //    .List<Customer>();
                //使用Name封装:.Add(Restrictions.Eq("Name.Firstname", firstname))
                return _session.CreateCriteria(typeof(Customer))
                    .Add(Restrictions.Eq("Firstname", firstname))
                    .List<Customer>();
            }
            /// <summary>
            /// 利用CriteriaAPI按Firstname和Lastname查询顾客
            /// </summary>
            /// <param name="firstname"></param>
            /// <param name="lastname"></param>
            /// <returns></returns>
            public IList<Customer> UseCriteriaAPI_GetCustomersByFirstnameAndLastname(string firstname, string lastname)
            {
                //NHibernate1.2写法
                //return _session.CreateCriteria(typeof(Customer))
                //    .Add(new NHibernate.Expression.EqExpression("Firstname", firstname))
                //    .Add(new NHibernate.Expression.EqExpression("Lastname", lastname))
                //    .List<Customer>();
    
                //NHibernate2.0写法
                //使用Name封装:.Add(Restrictions.Eq("Firstname", firstname))
                return _session.CreateCriteria(typeof(Customer))
                    .Add(Restrictions.Eq("Firstname", firstname))
                    .Add(Restrictions.Eq("Lastname", lastname))
                    .List<Customer>();
            }
            /// <summary>
            /// 利用CriteriaAPI获取顾客ID大于CustomerId的顾客
            /// </summary>
            /// <param name="customerId">顾客ID</param>
            /// <returns>顾客列表</returns>
            public IList<Customer> UseCriteriaAPI_GetCutomersWithIdGreaterThan(int customerId)
            {
                //NHibernate1.2写法
                //return _session.CreateCriteria(typeof(Customer))
                //    .Add(new NHibernate.Expression.GtExpression("CustomerId", customerId))
                //    .List<Customer>();
    
                //NHibernate2.0写法
                return _session.CreateCriteria(typeof(Customer))
                    .Add(Restrictions.Gt("CustomerId", customerId))
                    .List<Customer>();
            }
            #endregion
    
    
            #region 事务
            public IList<Customer> GetAll()
            {
                // 开启事物
                using (ITransaction tx = _session.BeginTransaction())
                {
                    try
                    {
                        //提交事务
                        tx.Commit();
                        return null;
                    }
                    catch (HibernateException ex)
                    {
                      // 回滚事务
                        tx.Rollback();
                       throw ex ;
                    }
                }
            }
    
    
            #endregion
    
            #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
    
    
            #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
            
    
            #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
    
  • 相关阅读:
    win10 uwp 弹起键盘不隐藏界面元素
    win10 uwp 存放网络图片到本地
    win10 uwp 存放网络图片到本地
    sublime Text 正则替换
    sublime Text 正则替换
    win10 uwp 绘图 Line 控件使用
    win10 uwp 绘图 Line 控件使用
    AJAX 是什么?
    什么是 PHP SimpleXML?
    PHP XML DOM:DOM 是什么?
  • 原文地址:https://www.cnblogs.com/wisdo/p/4279682.html
Copyright © 2011-2022 走看看