Unity服务器开发02:搭建NHibernate框架

编程入门 行业动态 更新时间:2024-10-28 08:20:39

Unity服务器开发02:搭建NHibernate<a href=https://www.elefans.com/category/jswz/34/1770644.html style=框架"/>

Unity服务器开发02:搭建NHibernate框架

Unity服务器开发02:搭建NHibernate框架

前篇文章:
Unity服务器开发01:C#连接MySQL数据库

(一)NHibernate简介与原理
1.介绍:
NHibernate是一个面向.NET环境的对象/关系数据库映射工具。对象/关系数据库映射(object/relational mapping,ORM)这个术语表示一种技术,用来把对象模型表示的对象映射到基于SQL的关系模型数据结构中去。

2.使用原理:

3.相关文档:
官方文档链接

(二)在VS中配置Nhibernate
1.创建新的控制台应用,命名完成后,右键项目选择【管理NuGet程序包】。

2.添加NHibernate,注意版本信息。添加MySQL引用(和前篇博客一致)。

完成添加:

(三)项目工程的基础配置(步骤繁琐,直接贴出配置后结果)
1.项目命名空间设置

2.项目层级结构

3.接口类:IUserManager

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Windbelledu.Model;namespace Windbelledu.Manager//创建管理类,处理CRUD操作
{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();//定义泛型//添加一个验证用户名和密码的接口bool VerifyUser(string username, string password);}}

4.实现接口的类:UserManager

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using NHibernate;
using Windbelledu.Model;
using NHibernate.Criterion;namespace Windbelledu.Manager
{class UserManager : IUserManager //定义实现接口的类{public void Add(Model.User user)//插入{//ISession session = NHibernateHelper.OpenSession();//session.Save(user);//session.Close();using (ISession session = NHibernateHelper.OpenSession())//using:使用资源后会自动释放{using (ITransaction transaction = session.BeginTransaction()){session.Save(user);transaction.Commit();}}}public void Update(Model.User user)//更新{using (ISession session = NHibernateHelper.OpenSession()){using (ITransaction transaction = session.BeginTransaction()){session.Update(user);transaction.Commit();}}}public void Remove(Model.User user)//删除{using (ISession session = NHibernateHelper.OpenSession()){using (ITransaction transaction = session.BeginTransaction()){session.Delete(user);transaction.Commit();}}}public Model.User GetById(int id)//通过id查询{using (ISession session = NHibernateHelper.OpenSession()){using (ITransaction transaction = session.BeginTransaction()){User user = session.Get<User>(id);transaction.Commit();return user;}}}public Model.User GetByUsername(string username)//通过用户名查询{using (ISession session = NHibernateHelper.OpenSession()){//ICriteria criteria = session.CreateCriteria(typeof(User));//criteria.Add(Restrictions.Eq("Username", username));//User user = criteria.UniqueResult<User>();User user = session.CreateCriteria(typeof(User)).Add(Restrictions.Eq("Username", username)).UniqueResult<User>();return user;}}public ICollection<Model.User> GetAllUsers()//查询得到所有用户{using (ISession session = NHibernateHelper.OpenSession()){//ICriteria criteria = session.CreateCriteria(typeof(User));//criteria.Add(Restrictions.Eq("Username", username));//User user = criteria.UniqueResult<User>();IList<User> users = session.CreateCriteria(typeof(User)).List<User>();return users;}}public bool VerifyUser(string username, string password)//验证用户名和密码{using (ISession session = NHibernateHelper.OpenSession()){//ICriteria criteria = session.CreateCriteria(typeof(User));//criteria.Add(Restrictions.Eq("Username", username));//User user = criteria.UniqueResult<User>();User user = session.CreateCriteria(typeof(User)).Add(Restrictions.Eq("Username", username)).Add(Restrictions.Eq("Password", password)).UniqueResult<User>();if (user == null) return false;return true;}}}
}

5.配置User.hbm.xml

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"assembly="Windbelledu"namespace="Windbelledu.Model"><class name="User" table="users">    <!--该命名空间下的User类与数据中的users表进行映射--><id name="Id" column="id" type="Int32">   <!--配置该空间的主键和数据库的主键--><generator class="native" ></generator> <!--native本地,使用自带的生成器,自动增长--></id><property name="Username" column="username" type="String" ></property>  <!--其他键使用property配置--><property name="Password" column="password" type="String" ></property><property name="Registerdate" column="registerdate" type="Date" ></property></class>
</hibernate-mapping>

6.表映射,User类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace Windbelledu.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; }}
}

7.帮助类NHibernateHelper,管理会话工厂

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using NHibernate;//引用NHibernate空间
using NHibernate.Cfg;//引用NHibernate配置namespace Windbelledu
{class NHibernateHelper//帮助类,管理会话工厂{private static ISessionFactory _sessionFactory;private static ISessionFactory SessionFactory{get{if (_sessionFactory == null)//如果为空,说明SessionFactory还未初始化,执行初始化{var configuration = new Configuration();configuration.Configure();configuration.AddAssembly("Windbelledu");//配置路径_sessionFactory = configuration.BuildSessionFactory();}return _sessionFactory;}}public static ISession OpenSession()//给外界提供方法{return SessionFactory.OpenSession();}}
}

8.program类,测试框架的使用

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using NHibernate;//引用NHibernate空间
using NHibernate.Cfg;//引用NHibernate配置
using Windbelledu.Model;
using Windbelledu.Manager;namespace Windbelledu
{class Program{static void Main(string[] args){//var configuration = new Configuration();//configuration.Configure();//解析nhibernate.cfg.xml,注意保持在同一路径//configuration.AddAssembly("Windbelledu"); //解析映射文件 User.hbm.xml创建ISessionFactory 工厂,与数据库会话//ISessionFactory sessionFactory = null;//ISession session = null;//ITransaction transaction = null;//try//{//    sessionFactory = configuration.BuildSessionFactory();//    session = sessionFactory.OpenSession();//打开一个跟数据库的对话//    //对数据库进行增加数据操作//    //User user = new User() { Username = "NHibernate", Password = "123" };//    //session.Save(user);//    //事务,事务包含多个操作//    transaction = session.BeginTransaction();//开启事务//    //进行操作//    User user1 = new User() { Username = "NHibernate03", Password = "123" };//    User user2 = new User() { Username = "NHibernate04", Password = "123" };//    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();//    }//}//使用封装后的方法// User user = new User() {Id=12, Username = "账号名不难重复", Password = "123" };IUserManager userManager = new UserManager();//userManager.Add(user);//插入数据//userManager.Update(user);//更新数据//userManager.Remove(user);//删除//User user = userManager.GetById(18);//根据主键查询//User user = userManager.GetByUsername("野哥");//Console.WriteLine(user.Username);//Console.WriteLine(user.Password);//ICollection<User> users = userManager.GetAllUsers();//foreach (User u in users)//{//    Console.WriteLine(u.Username + " " + u.Password);//}Console.WriteLine(userManager.VerifyUser("机宝", "222"));//结果应为trueConsole.WriteLine(userManager.VerifyUser("wer2", "wer"));//结果应为FalseConsole.ReadKey();}}
}

更多推荐

Unity服务器开发02:搭建NHibernate框架

本文发布于:2023-07-28 15:48:37,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1240055.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:框架   服务器   Unity   NHibernate

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!