Nhibernate基础练习

NHibernate是一个基于.Net,用于关系数据库的对象持久化类库.由JAVA平台的Hibernate迁移到.NET平台。
NHibernate用于把你的.Net对象持久化到底层的关系数据库中.你不用自己编写Sql语句去操作这些对象,NHibernate会代替你做.你的代码里面只需要关心这些对象,NH生成sql语句并能为你取到正确的东西.

创建一个WEB 应用程序Test!
1:配置

在<configSections>元素里定义了hibernate-configuration配置节。在<hibernate-configuration>节里面,我们告诉NHibernate使用MS SQL2005的数据库,并指明了数据库链接字符串。

<? xml version="1.0" encoding="utf-8"  ?>
< configuration >
<!--  Add this element  -->
< configSections >
< section
name ="hibernate-configuration"
type
="NHibernate.Cfg.ConfigurationSectionHandler, NHibernate"
/>
</ configSections >
<!--  Add this element  -->
< hibernate-configuration  xmlns ="urn:nhibernate-configuration-2.2" >
< session-factory >
< property  name ="dialect" > NHibernate.Dialect.MsSql2005Dialect </ property >
< property  name ="connection.provider" > NHibernate.Connection.DriverConnectionProvider </ property >
< property  name ="connection.connection_string" > Server=TLSZ207\SQLEXPRESS;initial catalog=Test;Integrated Security=true </ property >
</ session-factory >
</ hibernate-configuration >
<!--  Leave the system.web section unchanged  -->
< system.web >

</ system.web >
</ configuration >

hibernate.dialect
NHibernate方言(Dialect)的类名 - 可以让NHibernate使用某些特定的数据库平台的特性.
hibernate.connection.provider_class 
定制IConnectionProvider的类型.

hibernate.connection.connection_string 
用来获得连接的连接字符串.

2:创建数据表

1 use  Test
2 GO
3 CREATE   TABLE   User  (
4   LogonID  varchar ( 20 NOT   NULL   default   ' 0 ' ,
5   UserName  varchar ( 40 default   NULL ,
6   Password  varchar ( 20 default   NULL ,
7 )
8 GO


3:创建与数据库表映射的实体类

namespace  Test
{
       
public class User
       
{
              
private string logonID;
              
private string userName;
              
private string password;
 
 
              
public User()
              
{
              }

 
              
public string LogonID 
              
{
                     
get return logonID; }
                     
set { logonID = value; }
              }

              
public string UserName 
              
{
                     
get return userName; }
                     
set { userName = value; }
              }

              
public string Password 
              
{
                     
get return password; }
                     
set { password = value; }
              }

}

这完全是一个普通的poco类(Plain Old CLR Object),仅仅是对数据库User表的一个完全映射,不依赖于任何框架,可以用来作为持久化类,你可以在任何地方使用而不用担心依赖于某些神秘的运行时东西。

4:创建映射文件
NHibernate需要知道怎样去加载(load)和存储(store)持久化类的对象。这正是NHibernate映射文件发挥作用的地方。映射文件告诉NHibernate它应该访问数据库(database)里面的哪个表(table)及应该使用表里面的哪些字段(column)

<? xml version="1.0" encoding="utf-8"  ?>   
< hibernate-mapping  xmlns ="urn:nhibernate-mapping-2.2" >
    
< class  name ="User"  table ="User" >
 
< id  name ="LogonID"  column ="LogonId"  type ="String(20)" >  
                     
< generator  class ="assigned"   />
              
</ id >
              
< property  name ="UserName"  column ="UserName"  type ="String(40)" />
              
< property  name ="Password"  type ="String(20)" />
       
</ class >
</ hibernate-mapping >

class我们指明了User类映射到数据库表User,id标记指明该属性对应数据库表的主键字段。
这些嵌入的Generator标记告诉NH怎样生成Primary Key.在我们举的例子中,把它设置成"assigned",意思是"我们的对象将自己生成key"。
property节点的name属性指明我们实体类的属性,column指明与该属性对应的数据库表的字段。

5:代码

        protected   void  Save()
        
{
            NHibernate.Cfg.Configuration cfg 
= new NHibernate.Cfg.Configuration()
                .SetDefaultAssembly(
typeof(User).Assembly.FullName)
                .SetDefaultNamespace(
typeof(User).Namespace)
                .AddDirectory(
new System.IO.DirectoryInfo(System.Web.Hosting.HostingEnvironment.MapPath("~")));//Configuration对象知道所有在.Net类和后端数据库之间的映射关系

            ISessionFactory fac 
= cfg.BuildSessionFactory();
            ISession session 
= fac.OpenSession();
            ITransaction tr 
= session.BeginTransaction();

     User newUser 
= new User();
     newUser.LogonID 
= "1";
     newUser.UserName 
= "ZAKS";
     newUser.PassWord 
= "abc123";

            session.Save(newUser);
            tr.Commit();
            session.Close();
            fac.Close();
        }

常用的方法:
1.  获取记录
User user = (User)session.Get(typeof(User),1);
或者
User user = (User)session.Load(typeof(User),1);
2.  保存记录
session.Save(user);
 3.  删除记录
User user = (User)session.Get(typeof(User),1);
session.Delet(User);

你可能感兴趣的:(Hibernate)