關於使用Nhibernate連接數據庫的一些總結

第一步

      對項目導入mysql.data和Nhibernate包,可以使用Nuget導入,直接搜索就行,或者是從外部添加引用直接到顯目裏面

第二步

     在項目裏新建兩個文件夾,一個叫Model一個叫Mapping,model裏放與對應表關聯的數據類,一個裝該表與類的配置文件

     與數據庫關聯的類如下

     例子   用戶表

    注意 每一個成員變量都必須是virtual,不然會報錯

class User
{
   public virtual string username { get; set; }
   public virtual string password { get; set; }
      
}

      配置文件如下 例子

       名字格式必須是 類名.hbm.xml   (重要),文件屬性必須是如圖所示,不然會報找不到該文件的錯

            

     好的那麼繼續

       注意 class name 必須是你的類的名字,table 必須是數據庫中表的名字,不能寫錯

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
                   assembly="MyTurnGameServer"
                   namespace="MyTurnGameServer.Model">
  <!-- 項目所在的程序集;該配置文件所關聯的User.cs類所在的名稱空間 -->

  <class name="User" table="users">
    <!-- 指定名稱空間下的User類,要與數據庫中的user表映射 -->
    <id name="username" column="username" type="String"> </id>
    <property name="password" column="password" type="String"/>
    <!-- 只有主鍵用id,其他字段都用property -->
    <!--<property name="characterNumber" column="characterNumber" type="Int32"/>-->
  </class>

</hibernate-mapping>

 第三步

           添加連接數據庫的配置文件,也要採用特殊的命名格式,不過是特定的 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=127.0.0.1;Port = 3306;Database=turned-base-game;User ID=root;Password=123456</property>
    <!-- 端口號缺省值爲3306 -->

    <property name="show_sql">true</property>
    <!-- 是否打印執行的SQL語句 -->

    <!-- 坑點:如果當前解決方案下有多個項目,一定要指定程序集! -->
    <!--
    <mapping assembly="nhibernateToMysql"/>-->
  </session-factory>
</hibernate-configuration>

    以上配置文件可以直接複製,改下ip和用戶名密碼即可

 第四步

        在程序中讀取配置文件,並設置好會話工廠

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

namespace MyTurnGameServer
{
    class NHibernateHelper
    {
        private static ISessionFactory _sessionFactory;
        public static ISessionFactory SessionFactory
        {
            get
            {
                if (_sessionFactory == null)
                {
                    Configuration configuration = new Configuration();
                    configuration.Configure();
                    //添加程序集,必須是你作爲主入口函數的那個程序集
                    configuration.AddAssembly("MyTurnGameServer");
                    _sessionFactory = configuration.BuildSessionFactory();
                }
                return _sessionFactory;
            }
        }

        public static ISession Session
        {
            get
            {    
                //獲得會話
                return _sessionFactory.OpenSession();
            }

        }
    }
}

第五步

配置好管理器,開始對數據庫操作

   例子對users表進行增刪改查

    

using System;
using System.Collections.Generic;
using MyTurnGameServer.Model;
using MyTurnGameServer.IManager;
using NHibernate;
using NHibernate.Criterion;
using MyTurnGameServer;


namespace MyTurnGameServer.Manager
{
    class UserManager : IUserManager
    {   
        //添加用戶
        public void Add(User user)
        {
            using (ISession session = NHibernateHelper.SessionFactory.OpenSession())
            {
                using (ITransaction transaction = session.BeginTransaction())
                {
                    if (!VerifyUser(user.username))
                    {
                        session.Save(user);
                        transaction.Commit();
                    }
                    else
                    {
                        Console.WriteLine("用戶存在");
                    }

                }
            }
        }

        //刪除用戶
        public void Delete(User user)
        {
            using (ISession session = NHibernateHelper.SessionFactory.OpenSession())
            {
                using (ITransaction transaction = session.BeginTransaction())
                {
                    session.Delete(user);
                    transaction.Commit();
                }
            }
        }

        //獲得所有用戶
        public ICollection<User> GetAllUsers()
        {
            using (ISession session = NHibernateHelper.SessionFactory.OpenSession())
            {
                IList<User> users = session.CreateCriteria(typeof(User)).List<User>();
                return users;
            }
        }

        //通過用戶名獲得用戶
        public User GetUserByUserName(string username)
        {
            using (ISession session = NHibernateHelper.SessionFactory.OpenSession())
            {
                User user = session.CreateCriteria(typeof(User))
                       .Add(Restrictions.Eq("username", username)).
                       UniqueResult<User>();
                return user;
            }
        }

        //更新用戶
        public void Update(User user)
        {
            using (ISession session = NHibernateHelper.SessionFactory.OpenSession())
            {
                using (ITransaction transaction = session.BeginTransaction())
                {
                    session.Update(user);
                    transaction.Commit();
                }
            }
        }

        //驗證用戶
        public bool VerifyUser(string username, string password)
        {
            using (ISession session = NHibernateHelper.SessionFactory.OpenSession())
            {
                User user = session.CreateCriteria(typeof(User))
                    .Add(Restrictions.Eq("username", username))
                    .Add(Restrictions.Eq("password", password))
                    .UniqueResult<User>();

                if (user == null)
                    return false;
                else
                    return true;

            }
        }
        
        //通過用戶名驗證用戶
        public bool VerifyUser(string username)
        {
            using (ISession session = NHibernateHelper.SessionFactory.OpenSession())
            {
                User user = session.CreateCriteria(typeof(User)).
                         Add(Restrictions.Eq("username", username)).UniqueResult<User>();
                if (user == null)
                {
                    //用戶不存在;
                    return false;

                }
                else
                {
                    //用戶存在
                    return true;
                }

            }

        }


    }
}

第六步

           現在你對nhibernate應該有所瞭解了,後面有特殊需求參照以上內容修改即可,如果想要更深入的瞭解可以去看看官方的文檔,比較詳細,請自備翻譯軟件

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章