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 }
以上是实现过程主要代码
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
浙公网安备 33010602011771号