• Nhibernate的第一个实例


    第一个NhIbernate程序

     

    1、目的:

    a) 链接到oracle数据库

    b) 增删改

    c) 基本查询、sql查询

    d) 视图查询

    e) 使用存储过程

    f) 多表查询、级联查询

    g) 级联增删改

     

    2、后续目的

    a) 加载机制——立即加载or延迟加载

    b) 并发控制

    c) 缓存——一级缓存,二级缓存

     

       接下来我会一一完成上面的目的,以便对Hhibernate有更多的了解,写希望各位能多多的指正。

     

    3、第一个项目

    a) 下载

    Nhibernate最新版本为4.0.1.GA,下载地址:http://nhforge.org/

     

    下载内容如下图

     

     

    其中  Configuration_Templates中放的是各个数据库连接的配置文件样本模板,基本上包含了主流的数据库

     

    B) 创建项目

    根据三层架构把项目分为三层:

    第一层: Model层——主要存放数据实体与映射文件

    第二层: DAL层——存放数据库的操作方法

    第三层: Facade层——业务逻辑层,主要实现与页面的业务逻辑

    第四层: View层——页面层,包含接口、web

    第五层:Common层——公共类层,主要存储一些共有的操作类

     

    由于分五层为个人习惯问题,有不习惯的园友可以分三层:去掉第三层与第五层。

            分布图如下

           

        

     

      C) 引用DLL文件 (这里介绍主要的几个引用,其他的话,可以根据我放出的实例来看)

             Model层: 需要引入Required_Bins 文件夹中的Iesi.Collections.dllNHibernate.dll

             DAL层 :  需要引入Required_Bins 文件夹中的Iesi.Collections.dllNHibernate.dllModel层;

             Facade层:需要引入Model层与DAL层;

             View层:  需要引入Required_Bins 文件夹中的Iesi.Collections.dllNHibernate.dlllog4net.dllModel层与Facade层;

       

            其实还有另一种方法可以添加引用,就是通过NuGet进行引用,这种方法我在这里就不介绍了。

     

         D) 创建数据库

            先在oracle数据库中创建一张表,如图

     

          该表没有任何外键关联,也没其他表的ID字段。

     

    E)创建model层中的持久化类 及 xml映射文件

    创建cat的类

     

    创建catmapping对应的xml文件

     

     

    基本文件位置如下

     

     

        F)修改配置文件

          因为连接的是oracle的数据库,所以在下载的文件Configuration_Templates文件夹中找到oracle的配置文件,如图  

         

      选择oracle.cfg.xml 文件 放到View层下面 ,并且修改名字。默认的名字是hibernate.cfg.xml,且需要放在bin——debug文件夹下面。大多数情况我们会根据自身的习惯进行一些调整。比如我喜欢放在App_Data文件夹下。

       

     

        修改配置文件信息

            原始的配置文件信息

     

            我修改后的文件信息

     

        G)编写DAL方法与实例

     

    首先  先写一个NhibernateHelper.cs文件

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 using System.Threading.Tasks;
     6 
     7 using NHibernate;
     8 using NHibernate.Linq;
     9 using NHibernate.Criterion;
    10 
    11 namespace CommonClass
    12 {
    13    public class NHibernateHelper
    14     {
    15        /// <summary>
    16         /// Session工厂
    17         /// </summary>
    18         private  readonly ISessionFactory SessionFactory;
    19         /// <summary>
    20         /// nhibernate.cfg.xml 所在相对路径
    21         /// </summary>
    22         private  string xmlString = "App_Data/hibernate.cfg.xml";
    23         /// <summary>
    24         /// 构造函数
    25         /// </summary>
    26         public NHibernateHelper()
    27         {
    28             if (SessionFactory == null)
    29             {
    30                 var cfg = new NHibernate.Cfg.Configuration().Configure(xmlString);
    31                
    32                 SessionFactory = cfg.BuildSessionFactory();
    33                 
    34             }
    35         }
    36 
    37        public NHibernateHelper(string path)
    38         {
    39             if (SessionFactory == null)
    40             {
    41                 var cfg = new NHibernate.Cfg.Configuration().Configure(path);
    42 
    43                 SessionFactory = cfg.BuildSessionFactory();
    44             }
    45         }
    46 
    47         /// <summary>
    48         /// 获取一个Isession
    49         /// </summary>
    50         /// <returns></returns>
    51         public ISession GetSession()
    52         {
    53             return SessionFactory.OpenSession();
    54         }
    55         /// <summary>
    56         /// 关闭一个Isession
    57         /// </summary>
    58         /// <param name="session"></param>
    59         public void CloseSeeion(ISession session)
    60         {
    61             session.Close();
    62         }
    63 
    64         /// <summary>
    65         /// 关闭一个Isessionfactory
    66         /// </summary>
    67         public void CloseSessionFactory()
    68         {
    69             SessionFactory.Close();
    70         }
    71     }
    72 }

       再编写CATDAL.cs  用来操作数据库的方法

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    using NHibernate;
    using NHibernate.Linq;
    using NHibernate.Criterion;
    
    using ModelEntityClass.Model;
    using CommonClass;
    
    namespace DALClass
    {
        public class CATDAL
        {
            private  NHibernateHelper HB_Helper = null;
            public CATDAL()
            {
                HB_Helper = new NHibernateHelper();
            }
            /// <summary>
            /// 添加
            /// </summary>
            /// <param name="entitys"></param>
            /// <returns></returns>
            public bool InsertAll(List<CAT> entitys)
            {
                bool flag = false;
                ISession session = HB_Helper.GetSession();
                using (ITransaction tt = session.BeginTransaction())
                {
                    try
                    {
                        foreach (CAT entity in entitys)
                        {
                            session.Save(entity);
                        }
                        session.Flush();
                        tt.Commit();
                        flag = true;
                    }
                    catch (HibernateException ex)
                    {
                        tt.Rollback();
                    }
                }
    
                HB_Helper.CloseSeeion(session);
                return flag;
            }
            /// <summary>
            /// 根据ID进行查找
            /// </summary>
            /// <param name="id"></param>
            /// <returns></returns>
            public CAT Find(string id)
            {
                ISession session = HB_Helper.GetSession();
                CAT cat = null;
                using (ITransaction tt = session.BeginTransaction())
                {
                    try
                    {
                        cat = session.Query<CAT>().Where(p => p.ID == id).FirstOrDefault();
                    }
                    catch (HibernateException ex)
                    {
                        tt.Rollback();
                    }
                }
    
                HB_Helper.CloseSeeion(session);
                return cat;
            }
            /// <summary>
            /// 查询所有
            /// </summary>
            /// <returns></returns>
            public List<CAT> FindAll()
            {
                ISession session = HB_Helper.GetSession();
                //ICriteria criteria = session.CreateCriteria(typeof(CAT));
                List<CAT> catList = null;
                using (ITransaction tt = session.BeginTransaction())
                {
                    try
                    {
                        catList = session.Query<CAT>().ToList();
                    }
                    catch (HibernateException ex)
                    {
                        tt.Rollback();
                    }
                }
    
                HB_Helper.CloseSeeion(session);
                return catList;
            }
    
            /// <summary>
            /// 删除所有
            /// </summary>
            /// <param name="entitys"></param>
            /// <returns></returns>
            public bool DeleteAll(List<CAT> entitys)
            {
    
                bool flag = false;
                ISession session = HB_Helper.GetSession();
                using (ITransaction tt = session.BeginTransaction())
                {
                    try
                    {
                        foreach (CAT entity in entitys)
                        {
                            session.Delete(entity);
                        }
                        session.Flush();
                        tt.Commit();
                        flag = true;
                    }
                    catch (HibernateException ex)
                    {
                        tt.Rollback();
                    }
                }
    
                HB_Helper.CloseSeeion(session);
                return flag;
    
            }
    
            /// <summary>
            /// 删除
            /// </summary>
            /// <param name="entity"></param>
            /// <returns></returns>
            public bool Delete(CAT entity)
            {
    
                bool flag = false;
                ISession session = HB_Helper.GetSession();
                using (ITransaction tt = session.BeginTransaction())
                {
                    try
                    {
                        session.Delete(entity);
    
                        session.Flush();
                        tt.Commit();
                        flag = true;
                    }
                    catch (HibernateException ex)
                    {
                        tt.Rollback();
                    }
                }
    
                HB_Helper.CloseSeeion(session);
                return flag;
    
            }
    
    
            /// <summary>
            /// 保存和添加
            /// </summary>
            /// <param name="entity"></param>
            /// <returns></returns>
            public bool SaveAndUpdate(List<CAT> entitys)
            {
                bool flag = false;
                ISession session = HB_Helper.GetSession();
                using (ITransaction tt = session.BeginTransaction())
                {
                    try
                    {
                        foreach (CAT entity in entitys)
                        {
                            session.SaveOrUpdate(entity);
                        }
                        session.Flush();
                        tt.Commit();
                        flag = true;
                    }
                    catch (HibernateException ex)
                    {
                        tt.Rollback();
                    }
                }
    
                HB_Helper.CloseSeeion(session);
                return flag;
            }
        }
    }
    View Code

       接下来编辑业务逻辑层的类,由于它是对应ConsoleApplication1项目的这个业务,我把他命名成ConsoleFacade(里面只有一个方法,后面可以根据需要进行添加)

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    using ModelEntityClass.Model;
    using DALClass;
    
    namespace FacadeClass
    {
       public  class ConsoleFacade
        {
    
           public bool InsertAll(List<CAT> entitys)
           {
               CATDAL dal = new CATDAL();
               return dal.InsertAll(entitys);
           }
        }
    }
    View Code

       现在我们进行测试

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    using ModelEntityClass.Model;
    using FacadeClass;
    
    namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
                CAT cat = new CAT();
    
                cat.ID = Guid.NewGuid().ToString();
    
                cat.NAME = "芝麻";
                cat.SHORTNAME = "小婊砸";
                cat.CREATDATA = DateTime.Now;
                cat.ADDRESS = "北京市不知道什么的地方";
                cat.AGE = 2;
                cat.CODE = "M0001";
    
                List<CAT> InsertList = new List<CAT> ();
                InsertList.Add(cat);
    
                ConsoleFacade facade = new ConsoleFacade();
               if(  facade.InsertAll(InsertList))
               {
                   Console.WriteLine("添加成功");
               }else
               {
                   Console.WriteLine("添加失败");
               }
    
               Console.ReadKey();
            }
        }
    }
    View Code

       测试页面如下

    这样我们一个简单的Nhibernate实例就完成了。

     项目实例下载 

  • 相关阅读:
    sobel
    构造函数
    #pragma once & ifnde
    #pragma comment
    SET容器
    重载[] int& operator[ ]( )
    仿函数 operator()()
    remove_if erase
    vector
    map
  • 原文地址:https://www.cnblogs.com/cnwisdom/p/5526593.html
Copyright © 2020-2023  润新知