NHibernate使用--实战篇

经过一段时间的学习对于NHibernate有一定的了解,这里记录一下,也分享给更多的人,

 

首先是一个代码起手式

//获取一个ISession对象,放置在Using中这里可以自动销毁,方便管理
            using (ISession _ISession = NHibernateHelp.GetCurrentSession())
            {
                //创建事务代码块
                using (var trantion = _ISession.BeginTransaction())
                {
                    try
                    {
                        //业务操作

                        //提交事务
                        trantion.Rollback();
                    }
                    catch (Exception)
                    {
                        //回滚事务
                        trantion.Rollback();
                        //异常处理
                        throw;
                    }finally{
                        //释放资源
                        trantion.Dispose();
                    }
                }
            }
NHibernate起手式

接下来开始介绍,

一:配置文件 需要配置和数据库相关的属性

二:创建实体类和XML配置文件与数据中的表进行映射,注:XML以.hbm.xml为后缀名,其次属性中内容的值应为:嵌入的资源,

三:实际操作:

3.1 添加

/// <summary>
        /// 添加用户
        /// </summary>
        /// <param name="_ISession">ISession操作对象</param>
        private static void AddUser(ISession _ISession)
        {
            //创建一个要添加的对象
            Users AddUser = new Users() { Users_Age = 18, Users_IsState = 1, Users_LoginName = "Jike", Users_LoginPwd = "Jike1234", Users_Name = "特朗普*杰克", Users_Roles = "user", Users_Sex = "" };

            //调用Save添加方法

            //(1)种方法  有返回值 返回主键ID object类型
            object AddUserID = _ISession.Save(AddUser);

            //(2)种方法  没有返回值
            _ISession.Persist(AddUser);

            //判断添加成功后返回的键
            if (AddUserID != null)
            {
                Console.WriteLine(string.Format("添加成功了!"));
            }
            else
            {
                Console.WriteLine(string.Format("添加失败了!"));

            }
        }
添加

3.2 修改

/// <summary>
        /// 修改用户
        /// </summary>
        /// <param name="_ISession">ISession操作对象</param>
        private static void UpdateUser(ISession _ISession)
        {
            //创建一个要修改的对象
            Users UpdateUser = new Users() { Users_ID = 12, Users_Age = 18, Users_IsState = 1, Users_LoginName = "Jike", Users_LoginPwd = "Jike1234", Users_Name = "特朗普*杰克斯", Users_Roles = "user", Users_Sex = "" };

            //(1)显示调用Update方法进行修改
            _ISession.Update(UpdateUser);


            //(2) NHibernate会自动跟踪对加载的对象任何修改

            Users UpdateUsered = _ISession.Get<Users>(12);
            UpdateUser.Users_Name = "特朗普*杰克";
            Console.WriteLine("修改成功了");
        }
修改

3.3 删除

 /// <summary>
        /// 删除特定的用户
        /// </summary>
        /// <param name="_ISession">操作对象</param>
        public static void DeleteUser(ISession _ISession)
        {

            //删除对象

            //(1)使用Get方法获取要删除的对象  

            Users DeteleUser = _ISession.Get<Users>(13);

            //(1)使用Load方法获取要删除的对象
            //Users DeteleUser = _ISession.Load<Users>(14);

            //调用删除语句
            _ISession.Delete(DeteleUser);
            Console.WriteLine("删除成功了");
        }
删除

3.4 查询

查询有三种语法:SQL  HQL   CreateCriteria条件查询

/// <summary>
        /// 删除商品订单
        /// </summary>
        /// <param name="Orders_ID"></param>
        /// <returns></returns>
        public ActionResult DeteleOrder(string Orders_ID)
        {
            //验证参数
            if (Orders_ID != null && Orders_ID != "")
            {
                //创建ISession对象
                ISession _ISession = NHibernateHelp.GetCurrentSession();

                //创建事务单元块
                using (var trantion = _ISession.BeginTransaction())
                {
                    try
                    {
                        //修改集合对象 成功后返回数据1  若失败则会回滚

                        object Users = _ISession.CreateSQLQuery(string.Format("delete Orders  where Orders_ID = '{0}';select 1 ", Orders_ID)).List<object>().FirstOrDefault();

                        //提交事务
                        trantion.Commit();

                        //返回首页
                        return Content("<script>window.location.href = '/Orders/Index'; alert('删除成功!!');</script>");
                    }
                    catch (Exception ex)
                    {
                        //事务回滚
                        trantion.Rollback();
                        throw ex;
                    }
                    finally
                    {
                        //释放资源
                        trantion.Dispose();
                    }
                }
            }
            return Content("<script>window.location.href = '/Orders/Index'; alert('请选择要删除的对象?');</script>");
        }
SQL的方式

由于SQL的方式返回的是Object类型的所以在查询时可以配合CreateSQLQuery().AddEntity(typeof(类型))的方式,NHibernate会在返回数据的时候找到相应类型的配置文件将其和类的属性/变量一一对应,然后类的对象/集合

HQL的方式和SQL类似,使用时切记一点,你所操作的时类的对象而不是数据库的表
HQL的方式

随后我上传一个项目的链接   在OrderNHibernate.Test 程序中就主要应用了CreateCriteria的方式

项目下载:https://pan.baidu.com/s/1skVl82h ,请直接点击下载,不要打开压缩包,会有广告好像。。。

 另外我再帮助大家认识一下,监视数据流向 和生成的SQL语句,首先我们打开SQL SERVER 数据库找到菜单栏 工具 ---SQL SERVER Profiler,打开后出现如下界面

 

  

 

输入相应数据库连接 登陆

这个时候我们来运行一段代码  select * from Users

 

现在数据流中已经出现了对应的SQL语句,我们可以使用这个工具更好的学习,毕竟有些时候错误发生,我们不太容易看出来,但是使用这个工具至少可以把问题,风险排除于数据库之外

posted @ 2017-12-27 17:09  程序黄金猿  阅读(162)  评论(0编辑  收藏  举报