导入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;
}
}
}
}
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;
}
}
}
}