MySql(一)_利用NHibernate和MySql交互

1.基础配置,添加MySql和nHibernate的引用

  (1)   添加引用,导入MySql.data.dll;   利用MySql提供的API操作;

(2) 添加引用,导入NHibernate.dll;  利用nHibernate提供的API操作;

利用NuGet管理程序包直接下载使用。

2.修改“程序集名称”和“默认命名空间”,二者保持一致。

3.如何跟MySql建立连接?

(1)告诉nHibernate,连接什么样的数据库(MySql、SQLServer、Oracal),即数据库的种类。

(2)告诉nHibernate,连接数据库的地址(IP地址、用户名、密码、连接的数据库)。

(3)进行映射,把数据库的表映射成类,利用类创建对象,像操作对象一样操作数据库。

 

第一步:配置nHiberate,去连接数据库的一些信息

              配置nHiberate是使用XML来配置的。在项目下面右键“添加”——“新建项”,选择“XML文件”,名字为固定的  “nhibernate.cfg.xml”,nHibernate会自动读取此文件。

      

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <!-- 
 3 This template was written to work with NHibernate.Test.
 4 Copy the template to your NHibernate.Test project folder and rename it in hibernate.cfg.xml and change it 
 5 for your own use before compile tests in VisualStudio.
 6 -->
 7 <hibernate-configuration  xmlns="urn:nhibernate-configuration-2.2" >
 8   <session-factory name="NHibernate.Test">
 9     <property name="connection.driver_class">NHibernate.Driver.MySqlDataDriver</property>
10     <property name="connection.connection_string">
11       Database=unity;Data Source=localhost;User Id=root;Password=123456;
12       Protocol=memory;Old Guids=True;
13     </property>
14     <property name="dialect">NHibernate.Dialect.MySQL5Dialect</property>
15   </session-factory>
16 </hibernate-configuration>

根据提示修改即可。

第二步,如何进行类和表的映射

1.在项目下创建Model文件夹,进行与数据库中的表进行映射。在Model文件夹下,创建类,类名与相对应数据库的表名一致

   在类中创建相对应的属性(字段),与数据库中的列名保持一致。

2.在项目文件下创建Mappings文件夹,创建“XML文件”,创建XML配置文件,配置文件命名“数据库的表名/类名.hbm.xml”。

 在Mapping下的xml配置文件中,配置命名空间、程序集;配置类名对应表名;配置类中的属性名对应表中的列名。

 

 1 <?xml version="1.0" encoding="utf-8" ?>
 2 <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
 3                    namespace="NBOWeb.Model" assembly="NBOWeb">
 4 
 5   <class name="unity" table="unity">
 6 
 7     <!-- A 32 hex character is our surrogate key. It's automatically
 8             generated by NHibernate with the UUID pattern. -->
 9     <id name="Id">
10       <column name="Id" sql-type="INT"  length="11" not-null="true"/>
11       <generator class="uuid.hex" />
12     </id>
13 
14     <!-- A cat has to have a name, but it shouldn't be too long. -->
15     <property name="Name">
16       <column name="Name" sql-type="VarChar" length="8" />
17     </property>
18 
19     <property name="Age">
20       <column name="age" sql-type="INT" length="11" />
21     </property>
22     <property name="WorkAge" >
23      <column name="workage" sql-type="INT" length="11"/>
24     </property>
25   </class>
26 
27 </hibernate-mapping>

3.“nhibernate.cfg.xml”文件,属性-高级-“复制到输出目录设置为始终复制”;

  “数据库的表名/类名.hbm.xml”即“unity.hbm.xml”,属性-高级-生成操作-嵌入的资源;

 

总结:首先配置命名空间和程序集;在进行类名与表名的配置;最后进行主键和一般的其他属性的配置。//配置映射关系完成。

 

4.利用nHibernate进行操作

  1.让nHibernate进行配置的解析

     添加nHibernate和nHibernate.Cfg命名空间

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6 using NHibernate;
 7 using NHibernate.Cfg;
 8 using NBOWeb.Model;
 9 
10 namespace MySql_StudyTest
11 {
12     class Program
13     {
14         static void Main(string[] args)
15         {
16             var configuration=new Configuration();                        
17             configuration.Configure();             
18             configuration.AddAssembly("NBOWeb");
19             ISessionFactory sessionFactory = null;
20             ITransaction transaction = null;
21             ISession session = null;
22             try
23             {
24                 sessionFactory = configuration.BuildSessionFactory();
25                 session = sessionFactory.OpenSession();
26 
27                 //Unity unity = new Unity() {Name = "L.Juhnko", Age = 29, WorkAge = 10  };
28                 //session.Save(unity);
29 
30                 //事务,对数据库更改 
31                 transaction= session.BeginTransaction();//开启事务
32                 Unity unity1 = new Unity() { Name = "ko01", Age = 29, WorkAge = 10 };
33                 Unity unity2 = new Unity() { Name = "ko02", Age = 29, WorkAge = 10 };
34 
35                 session.Save(unity1);
36                 session.Save(unity2);
37                 transaction.Commit();//事务提交
38             }
39             catch (Exception e)
40             {
41                 Console.WriteLine(e);
42                  
43             }
44             finally
45 
46             {
47                 if (transaction!=null)
48                 {
49                     transaction.Dispose();
50                 }
51 
52                 if (session!=null)
53                 {
54                     session.Close();
55                 }
56                 if (sessionFactory!=null)
57                 {
58                     sessionFactory.Close();
59                 }
60             }
61             Console.ReadKey();
62         }
63     }
64 }

 

posted @ 2018-11-26 14:10  MR_L先生  阅读(397)  评论(0编辑  收藏  举报