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 }