MySQL学习004:利用NHibernate跟MySQL交互

一、创建C#控制台程序,添加C:\Program Files (x86)\MySQL\Connector NET 8.0\Assemblies\v4.5.2\MySql.Data.dll;

二、方式1:从NHibernate官网(https://nhibernate.info/)下载,找到NHibernate.dll,添加该引用;

       方式2:鼠标右键该程序,选择“管理NuGet程序包(N)...”,联机搜索Nhibernate,下载并安装之;

三、添加nhibernate数据库连接配置   “鼠标右键——添加——XML文件——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>   <!--使用MySQL5的版本-->
    <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>

四、进行类和表的映射:

1.鼠标右键添加文件夹Model,文件夹下添加类User:

using System;

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 Registerdate { get; set; }
    }
}

2.鼠标右键添加文件夹Mappings,文件夹下添加配置文件User.hbm.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="Registerdate" column="registerdate" type="Date"></property>
  </class>

</hibernate-mapping>

3.鼠标右键,点击生成。

4.解析配置文件,填写Program.cs:

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

            Console.ReadKey();
        }
    }
}

五、创建会话session,进行添加数据操作,Program.cs:

using System;
using NHibernate;
using NHibernate.Cfg;
using Sikiedu.Model;

namespace Sikiedu
{
    class Program
    {
        static void Main(string[] args)
        {
            var configuration = new Configuration();
            configuration.Configure();//解析nhibernate.cfg.xml
            configuration.AddAssembly("Sikiedu");//解析  映射文件  User.hbm.xml
            ISessionFactory sessionFactory = null;
            ISession session = null;
            try
            {
                sessionFactory = configuration.BuildSessionFactory();
                session = sessionFactory.OpenSession();//打开一个跟数据库的会话
                User user = new User() { Username = "fafdafd", Password = "43143" };
                session.Save(user);
            }
            catch(Exception e)
            {
                Console.WriteLine(e);
            }
            finally
            {
                if(session!=null)
                {
                    session.Close();
                }
                if(sessionFactory!=null)
                {
                    sessionFactory.Close();
                }
            }

            Console.ReadKey();
        }
    }
}

六、利用NHibernate进行事务操作

 static void Main(string[] args)
        {
            var configuration = new Configuration();
            configuration.Configure();//解析nhibernate.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 = "fafdafd", Password = "43143" };
                //session.Save(user);

                //事务
                transaction = session.BeginTransaction();
                //进行操作
                User user1 = new User() { Username = "dfalfjasf", Password = "345436" };
                User user2 = new User() { Username = "dfalffadfa", Password = "345436" };
                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管理会话工厂,NHibernateHelper.cs:

using NHibernate;
using NHibernate.Cfg;

namespace Sikiedu
{
    class NHibernateHelper
    {
        private static ISessionFactory _sessionFactory;
        private static ISessionFactory SessionFactory
        {
            get
            {
                if(_sessionFactory==null)
                {
                    var configuration = new Configuration();
                    configuration.Configure();
                    configuration.AddAssembly("Sikiedu");
                    _sessionFactory = configuration.BuildSessionFactory();
                }
                return _sessionFactory;
            }
        }

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

八、创建管理类,处理CRUD操作

鼠标右键添加文件夹Manager,文件夹下添加接口IUserManager和类UserManager:

using System.Collections.Generic;
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> GetAllUsers();
    }
}
using System;
using System.Collections.Generic;
using Sikiedu.Model;
using NHibernate;

namespace Sikiedu.Manager
{
    class UserManager : IUserManager
    {
        public void Add(User user)
        {
            //ISession session = NHibernateHelper.OpenSession();
            //session.Save(user);
            //session.Close();
            using (ISession session = NHibernateHelper.OpenSession())
            {
                using (ITransaction transaction = session.BeginTransaction())
                {
                    session.Save(user);
                    transaction.Commit();
                }
            }
        }
    }
}
using System;
using NHibernate;
using NHibernate.Cfg;
using Sikiedu.Model;
using Sikiedu.Manager;

namespace Sikiedu
{
    class Program
    {
        static void Main(string[] args)
        {
            User user = new User() { Username = "吉吉国王", Password = "fdagad" };
            IUserManager userManager = new UserManager();
            userManager.Add(user);
            Console.ReadKey();
        }
    }
}

......

......

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

林枫依依

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值