NH02 对01篇缺点进行分析

思想有参考于:http://blog.csdn.net/yuebinghaoyuan/article/details/7430086

01主要代码如下

 1 using NH01.Domain;
 2 using NHibernate;
 3 using NHibernate.Cfg;
 4 using System;
 5 using System.Collections.Generic;
 6 using System.IO;
 7 using System.Linq;
 8 using System.Reflection;
 9 using System.Text;
10 using System.Threading.Tasks;
11 
12 namespace NH01
13 {
14 
15     //创建思路:工作 sessionFactory创建ISession   ISession操作数据库
16     class Program
17     {
18         static void Main(string[] args)
19         {
20             //创建工厂第一种方式
21             ISessionFactory sessionFactory = CreateISessionFactory2();
22             //创建工厂第二种方式
23             ISessionFactory sessionFactory2 = CreateISessionFactory();
24             Text(sessionFactory);
25             Text(sessionFactory2);
26            
27         }
28 
29         public static void Text(ISessionFactory sessionFactory)
30         {
31             ISession session = null;
32             ITransaction mTransaction = null;
33             if (session == null)
34             {
35                 session = sessionFactory.OpenSession();      //创建session会话
36             }
37             try
38             {
39                 EmployeeInfo info = new EmployeeInfo() { DeptName = "wiaaaase", EmpNo = 1, Designation = "jock", EmpName = "bia", Salary = 45 };
40                 mTransaction = session.BeginTransaction();       //打事事务
41                 session.Save(info); //将对象状态更改为持久态
42                 session.Transaction.Commit(); //提交
43             }
44             catch (Exception ex)
45             {
46                 mTransaction.Rollback(); //事务回滚
47             }
48             finally
49             {
50                 if (session.IsOpen)  //判断会话是否打开
51                 {
52                     session.Close();    //关闭会话
53                 }
54             }
55         
56         }
57 
58 
59         /// <summary>
60         /// 第二步种实现方式:通过直接设置参数创建工厂
61         /// </summary>
62         /// <returns></returns>
63         static ISessionFactory CreateISessionFactory()
64         {
65             Configuration cfg = new Configuration();
66             cfg.SetProperty("connection.provider", "NHibernate.Connection.DriverConnectionProvider");
67             cfg.SetProperty("dialect", "NHibernate.Dialect.MsSql2008Dialect");
68             cfg.SetProperty("connection.driver_class", "NHibernate.Driver.SqlClientDriver");
69             cfg.SetProperty("connection.connection_string", "server=127.0.0.1;database=Company;uid=sa;pwd=123;");
70             cfg.AddAssembly(Assembly.GetCallingAssembly());   //加载言所属程序集的以XXX.hbm.xml格式的映射文件(关键:生成操作设置为:嵌入的资源)
71             ISessionFactory sessionFactory = cfg.BuildSessionFactory();
72             return sessionFactory;
73         }
74 
75         /// <summary>
76         /// 第-种 :通进读取外部文件创建工厂
77         /// </summary>
78         /// <returns></returns>
79 
80         static ISessionFactory CreateISessionFactory2()
81         {
82             Configuration cfg = new Configuration().Configure(@"E:\NH2015\NH01\NH01\NHibernate\Configuration\hibernate.cfg.xml"); //读取xml文件
83             cfg.AddDirectory(new DirectoryInfo(@"E:\NH2015\NH01\NH01\Domain\Mapping"));   //读取实体类的映射文件
84             ISessionFactory sessionFactory = cfg.BuildSessionFactory();   //创建工厂
85             return sessionFactory; 
86         }
87     }
88 }
NH01代码

以上是实现过程主要代码

 public static void Text(ISessionFactory sessionFactory)
        {
            ISession session = null;
            ITransaction mTransaction = null;
            if (session == null)
            {
                session = sessionFactory.OpenSession();      //创建session会话
            }
            try
            {
                EmployeeInfo info = new EmployeeInfo() { DeptName = "wiaaaase", EmpNo = 1, Designation = "jock", EmpName = "bia", Salary = 45 };
                mTransaction = session.BeginTransaction();       //打事事务
                session.Save(info); //将对象状态更改为持久态
                session.Transaction.Commit(); //提交
            }
            catch (Exception ex)
            {
                mTransaction.Rollback(); //事务回滚
            }
            finally
            {
                if (session.IsOpen)  //判断会话是否打开
                {
                    session.Close();    //关闭会话
                }
            }
        
        }

Hibernate操作的步骤如下:

1.      获得Configuration对象

2.      创建SessionFactory

3.      创建Session

4.      打开事务

5.      进行持久化操作。比如上面的添加用户操作

6.      提交事务

7.      发生异常,回滚事务

8.      关闭事务

使用Hibernate进行访问持久层,每次都要进行这八个步骤。但增删查改我们经常用的,每一次操作都要经过这8步实现过行麻烦,那是不是有一种更新的方法进行简化呢?参照http://blog.csdn.net/yuebinghaoyuan/article/details/7430086思想

使用Hibernate进行访问持久层,每次都要进行这八个步骤。但是若使用Spring对Hibernate进行管理,又是怎么样的呢?

首先,Spring对Hibernate提供了HibernateTemple类。这个模版类对session进行封装。并且Spring会默认为自动提交事务。所在在dao层直接写入this.save(Object)即可。

 

请阅读下一篇:NH03 

 

posted on 2015-12-30 11:10  高达  阅读(153)  评论(0)    收藏  举报

导航