Nhibernate介绍与使用

NHibernate简介
NHibernate是一个面向.NET环境的对象/关系数据库映射工具。对象/关系数据库映射(object/relational mapping,ORM)这个术语表示一种技术,用来把对象模型表示的对象映射到基于SQL的关系模型数据结构中去。 
NHibernate下载地址:NHibernate
--------------------- 
添加MySql.Data和NHibernate引用

创建数据库链接配置文件hibernate.cfg.xml

hibernate.cfg.xml:

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
  <session-factory>
    <property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
    <property name="dialect">NHibernate.Dialect.MySQL5Dialect</property>
    <property name="connection.driver_class">NHibernate.Driver.MySqlDataDriver</property>
    <property name="connection.connection_string">Server=localhost;Database=mygamedb;User ID=root;Password=123;</property>

    <property name="hbm2ddl.keywords">none</property>
    <property name="show_sql">true</property>
  </session-factory>
</hibernate-configuration>

注意:hibernate.cfg.xml文件的属性中“复制到输出目录”应设置为“始终复制” 

创建实体类并进行与表的映射文件User.hbm.xml

1.创建一个User类:

 

using System;

namespace MyGameServer.Model
{
    public class User
    {
        public virtual int Id { get; set; }
        public virtual string Username { get; set; }
        public virtual string Password { get; set; }
        public virtual DateTime Registerdate { get; set; }

    }
}

2.创建User与表的映射文件User.hbm.xml:

 

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
                   assembly="MyGameServer5"
                   namespace="MyGameServer5.Model">

  <class name="User" table="users">
    <id name="Id" column="id" type="Int32">
      <generator class="native"></generator>
    </id>
    <property name="Username" column="username" type="String"></property>
    <property name="Password" column="password" type="String"></property>
    <property name="Registerdate" column="registerdate" type="Date"></property>

  </class>

</hibernate-mapping>

注意:User.hbm.xml文件的属性中“复制到输出目录”应设置为“不复制”,“生成操作”设置为“嵌入的资源” 
assembly:该项目的程序集 
namespace:User类的命名空间 
< class name=”User”>:配置User类 
< id name=”Id” colum=”id” type=”Int32”>:配置主键Id 
< property name=”Username” colum=”username” type=”String”>:配置普通字段 
name表示类中的属性名 colum表示数据库表中的字段名
--------------------- 

NHibernate解析数据库配置文件和表映射文件

1.创建一个Configuration对象,用来解析xml文件 
var configuration = new Configuration(); 
2.解析数据库链接配置文件/解析hibernate.cfg.xml 
configuration.Configure(); 
3.解析表映射文件User.hbm.xml… 
configuration.AddAssembly(“MyGameServer5”);

using System;
using NHibernate;
using NHibernate.Cfg;
using MyGameServer5.Model;

namespace MyGameServer5
{
    class Program
    {
        static void Main(string[] args)
        {
            var configuration = new Configuration();
            configuration.Configure();           //解析hibernate.cfg.xml
            configuration.AddAssembly("MyGameServer5");      //解析表映射文件User.hbm.xml...
            Console.ReadKey();
        }
    }
}

创建Session会话并进行添加操作

1.获取会话工厂 
sessionFactory = configuration.BuildSessionFactory(); 
2.开启一个和数据库的会话session 
session = sessionFactory.OpenSession(); 
3.进行插入操作 
User user = new User() { Username = “cch12345656”, Password = “oop12” }; 
session.Save(user);

using System;
using NHibernate;
using NHibernate.Cfg;
using MyGameServer5.Model;

namespace MyGameServer5
{
    class Program
    {
        static void Main(string[] args)
        {
            var configuration = new Configuration();
            configuration.Configure();           //解析hibernate.cfg.xml
            configuration.AddAssembly("MyGameServer5");      //解析表映射文件User.hbm.xml...

            ISessionFactory sessionFactory = null;
            ISession session = null;
            try
            {
                //获取会话工厂
                sessionFactory = configuration.BuildSessionFactory();
                //开启一个和数据库的会话session
                session = sessionFactory.OpenSession();

                //进行插入操作
                User user = new User() { Username = "cch12345656", Password = "oop12" };
                session.Save(user);

            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }
            finally
            {
                if (session != null)
                {
                    session.Close();
                }
                if (sessionFactory != null)
                {
                    sessionFactory.Close();
                }
            }
            Console.ReadKey();
        }
    }
}

ITransaction事务操作

using System;
using NHibernate;
using NHibernate.Cfg;
using MyGameServer5.Model;

namespace MyGameServer5
{
    class Program
    {
        static void Main(string[] args)
        {
            var configuration = new Configuration();
            configuration.Configure();           //解析hibernate.cfg.xml
            configuration.AddAssembly("MyGameServer5");      //解析Ma映射文件User.hbm.xml...

            ISessionFactory sessionFactory = null;
            ISession session = null;
            ITransaction transaction = null;
            try
            {
                //获取会话工厂
                sessionFactory = configuration.BuildSessionFactory();
                //开启一个和数据库的会话session
                session = sessionFactory.OpenSession();

                transaction = session.BeginTransaction();
                User user = new User() { Username = "test1", Password = "oop12" };
                User user1 = new User() { Username = "test1", Password = "oop12" };
                session.Save(user);
                session.Save(user1);
                transaction.Commit();

            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }
            finally
            {
                if (transaction != null)
                {
                    transaction.Dispose();
                }
                if (session != null)
                {
                    session.Close();
                }
                if (sessionFactory != null)
                {
                    sessionFactory.Close();
                }
            }
            Console.ReadKey();
        }
    }
}
 

创建SessionFactory

使用单例模式:从工厂ISessionFactory中取出Session

using System;
using NHibernate;
using NHibernate.Cfg;

namespace MyGameServer5
{
    class SessionFactory
    {
        private static ISessionFactory sessionFactory;
        public static ISessionFactory MSessionFactory
        {
            get
            {
                if (sessionFactory == null)
                {
                    var configuration = new Configuration();
                    configuration.Configure();           //解析hibernate.cfg.xml
                    configuration.AddAssembly("MyGameServer5");      //解析Ma映射文件User.hbm.xml...
                    sessionFactory = configuration.BuildSessionFactory();
                }
                return sessionFactory;
            }
        }

        public static ISession OpenSession()
        {
            return MSessionFactory.OpenSession();
        }
    }
}

创建xxxManager类,进行CRUD操作
1.添加操作:session.Save(user); 
2.更新操作:session.Update(user); 
3.删除操作:session.Delete(user); 
4.简单查询操作:User user = session.Get< User>(id); 
5.复杂查询操作:使用session得到ICriteria对象进行复杂查询 
ICriteria criteria = session.CreateCriteria< User>(); 
添加查询条件Username为数据库中的字段名,username为查询的条件值,Add方法依然返回ICriteria对象,可添加多个条件进行查询 
criteria.Add(Restrictions.Eq(“Username”,username)).Add(…)…; 
criteria.UniqueResult< T>();获取单个结果,criteria.List< T>()获取多个结果集合 
User user = criteria.UniqueResult< User>(); 
IList users = criteria.List< User>(); 
注意1:添加更新删除操作要进行事务Transaction操作,查询操作不需要 
注意2:using(对象){}:using小括号中的对象只能作用在花括号范围,花括号执行结束,对象被释放,使用using可省略session.Close()操作 


IUserManager:

using System;
using System.Collections.Generic;
using MyGameServer5.Model;

namespace MyGameServer5.Manager
{
    public interface IUserManager
    {
        void Add(User user);
        void Update(User user);
        void Delete(User user);
        User GetUserById(int id);
        User GetUserByUsername(string username);
        List<User> GetAll();
        bool Verfiy(string username, string password);
    }
}

UserManager:

using System;
using System.Collections.Generic;
using System.Linq;
using NHibernate;
using NHibernate.Criterion;
using MyGameServer5.Model;

namespace MyGameServer5.Manager
{
    public class UserManager:IUserManager
    {
        public void Add(Model.User user)
        {
            using(ISession session = SessionFactory.OpenSession()){
                using(ITransaction transation = session.BeginTransaction()){
                    session.Save(user);
                    transation.Commit();
                }
            }
        }

        public void Update(Model.User user)
        {
            using (ISession session = SessionFactory.OpenSession())
            {
                using (ITransaction transation = session.BeginTransaction())
                {
                    session.Update(user);
                    transation.Commit();
                }
            }
        }

        public void Delete(Model.User user)
        {
            using (ISession session = SessionFactory.OpenSession())
            {
                using (ITransaction transation = session.BeginTransaction())
                {
                    session.Delete(user);
                    transation.Commit();
                }
            }
        }

        public Model.User GetUserById(int id)
        {
            ISession session = SessionFactory.OpenSession();
            User user = session.Get<User>(id);
            return user;
        }

        public Model.User GetUserByUsername(string username)
        {
            ISession session = SessionFactory.OpenSession();
            ICriteria criteria = session.CreateCriteria<User>();
            criteria.Add(Restrictions.Eq("Username",username));
            User user = criteria.UniqueResult<User>();
            return user;
        }

        public List<Model.User> GetAll()
        {
            ISession session = SessionFactory.OpenSession();
            ICriteria criteria = session.CreateCriteria(typeof(User));
            IList<User> users = criteria.List<User>();
            return users.ToList<User>();
        }


        public bool Verfiy(string username, string password)
        {
            bool flag = false;
            ISession session = SessionFactory.OpenSession();
            ICriteria criteria = session.CreateCriteria(typeof(User));
            criteria.Add(Restrictions.Eq("Username", username));
            criteria.Add(Restrictions.Eq("Password", password));
            User user = criteria.UniqueResult<User>();
            if (user != null)
            {
                flag = true;  
            }
            return flag;
        }
    }
}
 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值