使用nHibernate


导入MySql.Data引用

http://nhibernate.info/doc/tutorials/first-nh-app/your-first-nhibernate-based-application.html  学习文档网址

导入NHibernate引用    在官网下载或者在  NUGET里下载

修改程序集名称,默认命名空间名称

NHibernate数据库连接配置:

先创建一个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=root;</property>

    <property name="show_sql">true</property>
  </session-factory>
</hibernate-configuration>


在创建一个Model文件夹,放对应的类

创建一个叫User的类

namespace Sikiedu.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 Createtime { get; set; }
    }
}


在创建一个Mappings文件夹,放与类对用的xml文件

创建一个xml文件,文件名User.hbm.xml;        生成操作选择嵌入的资源

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
                   assembly="Sikiedu"
                   namespace="Sikiedu.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="Createtime" column="createtime" type="DateTime"></property>
  </class>

</hibernate-mapping>



没有封装的用法:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using NHibernate;
using NHibernate.Cfg;
using Sikiedu.Model;

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

            ISessionFactory sessionFactory = null;
            ISession session = null;
            ITransaction transaction = null;
            try
            {
                sessionFactory = configuration.BuildSessionFactory();

                session = sessionFactory.OpenSession();   //打开一个跟数据库的会话(连接数据库)

                //User user = new User() { Username = "hdaskhfa", Password = "4682131" };
                //session.Save(user);   //添加一个数据

                //事务  是当有一个失败的话,其他成功的也会变成失败,多用于银行转钱
                transaction = session.BeginTransaction();  //打开一个事务
                //进行操作
                User user1 = new User() { Username = "eqwreq", Password = "57813488" };
                User user2 = new User() { Username = "eqwreq", Password = "46131545" };
                session.Save(user1);                //这个成功了
                session.Save(user2);                //这个出错了,两个都错了
                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();
        }
    }
}

封装起来的使用:

创建一个NHibernateHelper类  封装会话工厂

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using NHibernate;
using NHibernate.Cfg;

namespace Sikiedu
{
    class NHibernateHelper
    {
        private static ISessionFactory _sessionFactory;
        private static ISessionFactory SessionFactory
        {
            get
            {
                if(_sessionFactory==null)
                {
                    Configuration configuration = new Configuration();  //配置
                    configuration.Configure();            //解析hibernate.cfg.xml
                    configuration.AddAssembly("Sikiedu");  //解析 映射文件 User.hbm.xml ...
                    _sessionFactory = configuration.BuildSessionFactory();
                }
                return _sessionFactory;
            }
        }
        public static ISession OpenSession()
        {
            return SessionFactory.OpenSession();
        }
    }
}

创建一个文件夹,Manager(管理User类的)
先创建一个接口 IUserManager

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Sikiedu.Model;
namespace Sikiedu.Manager
{
    interface IUserManager
    {
        void Add(User user);
        void Update(User user);
        void Remove(User user);
        User GetById(int id);
        User GetByUsername(string username);
        ICollection<User> GetAllUser();
        bool VerifyUser(string username, string password);
    }
}

在创建一个类UserManager

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Sikiedu.Model;
using NHibernate;
using NHibernate.Criterion;
namespace Sikiedu.Manager
{
    class UserManager : IUserManager
    {
        public void Add(User user)
        {
            using (ISession session = NHibernateHelper.OpenSession())  //using运行完自动释放
            {
                using (ITransaction transaction = session.BeginTransaction())
                {
                    session.Save(user);
                    transaction.Commit();
                }       
            }    
        }

        public ICollection<User> GetAllUser()
        {
            using (ISession session = NHibernateHelper.OpenSession())
            {
                ICriteria criteria =  session.CreateCriteria("User");
                IList<User> users = criteria.List<User>();
                return users;
            }
        }

        public User GetById(int id)
        {
            using (ISession session = NHibernateHelper.OpenSession())
            {
                using (ITransaction transaction = session.BeginTransaction())
                {
                    User user= session.Get<User>(id);
                    transaction.Commit();
                    return user;
                }
            }
        }

        public User GetByUsername(string username)
        {
            using (ISession session = NHibernateHelper.OpenSession())
            {
                ICriteria criteria = session.CreateCriteria(typeof(User));  //创建一个条件
                criteria.Add(Restrictions.Eq("Username", username));//判断Username和参数相等,使用using NHibernate.Criterion
                User user= criteria.UniqueResult<User>();  //得到结果
                return user;
            }
        }

        public void Remove(User user)
        {
            using (ISession session = NHibernateHelper.OpenSession())
            {
                using (ITransaction transaction = session.BeginTransaction())
                {
                    session.Delete(user);
                    transaction.Commit();
                }
            }
            
        }

        public void Update(User user)
        {
            using (ISession session = NHibernateHelper.OpenSession())
            {
                using (ITransaction transaction = session.BeginTransaction())
                {
                    session.Update(user);
                    transaction.Commit();
                }
            }
        }

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



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值