netbeans hibernate连接mysql,【C#】使用NHibernate连接MySQL数据库及增删改查

Visual Studio新建一个C#控制台程序,设为启动项,在项目属性中设置目标框架为.NET Framework4.5。

添加两个DLL引用:MySQL.Data.dll和NHibernate.dll。后者在NHibernate官网中下载或者直接从Nuget安装。

新建一个文件hibernate.cfg.xml。该配置文件的内容复制于NHibernate文档(搜Configure NHibernate)。因为文档中连接的是SqlServer,而我们要用的是MySQL,所以要做如下修改。配置文档的写法参考NHibernate连接MySQL案例。<?xml version="1.0" encoding="utf-8" ?>

NHibernate.Connection.DriverConnectionProvider

NHibernate.Dialect.MySQL5Dialect

NHibernate.Driver.MySqlDataDriver

Server=localhost;Database=mygamedb;User ID=root;Password=root

true

已知MySQL数据库中的表和内容如下图:

208339421c4fc849c52501ac4b24881d.png

项目根目录新建Model文件夹,在该文件夹下新建User.cs类。内容如下:

namespaceNHibernateConnectMySQL.Model

{public classUser

{public virtual int Id { get; set; }public virtual string UserName { get; set; }public virtual string UserPwd { get; set; }public virtual DateTime UserRegisterTime { get; set; }

}

}

项目根目录新建Mappings文件夹,在该文件夹下新建User.hbm.xml文件(命名习惯上与要关联的User.cs类命名一致)。写法同样参考官方文档(搜The complete mapping file)。

在【属性】窗体修改hibernate.cfg.xml的【复制到输出路径】为【始终复制】。修改User.hbm.xml的【生成操作】为【嵌入的资源】。然后生成项目。可以在Debug目录下看到hibernate.cfg.xml文件直接被复制过来了,而User.hbm.xml的内容被集成到了exe文件中。

写代码完成NHibernate初始化操作,就是解析数据库链接配置文件(即hibernate.cfg.xml)和各种表映射文件(User.hbm.xml等等)。通常在项目的主函数中执行。

测试插入一条纪录,代码如下:

usingNHibernate;usingNHibernate.Cfg;usingNHibernateConnectMySQL.Model;usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;namespaceNHibernateConnectMySQL

{classProgram

{static void Main(string[] args)

{//---- NHibernate初始化 ----

var conf = newConfiguration();//解析hibernate.cfg.xml

conf.Configure(); //参数为文件,缺省值就是hibernate.cfg.xml//解析表映射文件(User.hbm.xml等),表映射文件已被集成到程序集中(嵌入的资源)//conf.AddAssembly("NHibernateConnectMySQL");//参数为文件所在的程序集,已在hibernate.cfg.xml中声明//---- 完成初始化 ----//---- 连接数据库 ----

ISessionFactory sessionFactory = null;

ISession session= null;

ITransaction transaction= null;try{//连接数据库的会话工厂

sessionFactory =conf.BuildSessionFactory();//打开一个跟数据库的会话

session =sessionFactory.OpenSession();//开启事务

transaction =session.BeginTransaction();

User user1= new User() { UserName = "jjssag2", UserPwd = "4606519"};

User user2= new User() { UserName = "jjssag3", UserPwd = "46064519"};

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();

}

}

}

完善增删改查

项目目录如下:

6d4885464a9d3cbebf812756ac0c2fc9.png

由于每次操作都要开启一个会话Session,都要使用事务Transaction,所以考虑将重复的内容进行封装,写一个NHibernateHelper.cs工具类。

usingNHibernate.Cfg;usingNHibernate;namespaceNHibernateConnectMySQL

{classNHibernateHelper

{private staticISessionFactory _sessionFactory;public staticISessionFactory SessionFactory

{get{if (_sessionFactory == null)

{var conf = newConfiguration();

conf.Configure();

conf.AddAssembly("NHibernateConnectMySQL");

_sessionFactory=conf.BuildSessionFactory();

}return_sessionFactory;

}

}public staticISession OpenSession()

{returnSessionFactory.OpenSession();

}

}

}

Manager文件夹下是各个类的增删改查操作实现。

usingSystem.Collections.Generic;usingNHibernateConnectMySQL.Model;usingNHibernate;usingNHibernate.Criterion;namespaceNHibernateConnectMySQL.Manager

{classUserManager : IUserManager

{//插入一条纪录

public voidAdd(User user)

{using (ISession session =NHibernateHelper.SessionFactory.OpenSession())

{using (ITransaction transaction =session.BeginTransaction())

{

session.Save(user);

transaction.Commit();

}

}

}//删除一条纪录

public voidDelete(User user)

{using (ISession session =NHibernateHelper.SessionFactory.OpenSession())

{using (ITransaction transaction =session.BeginTransaction())

{

session.Delete(user);

transaction.Commit();

}

}

}//更新一条纪录

public voidUpdate(User user)

{using (ISession session =NHibernateHelper.SessionFactory.OpenSession())

{using (ITransaction transaction =session.BeginTransaction())

{

session.Update(user);

transaction.Commit();

}

}

}//查询一条纪录

public User GetUserByID(intid)

{using (ISession session =NHibernateHelper.SessionFactory.OpenSession())

{//查询不会对数据进行操作,可以不用事务

User user = session.Get(id);returnuser;

}

}//查询一条纪录

public User GetUserByUserName(stringuserName)

{using (ISession session =NHibernateHelper.SessionFactory.OpenSession())

{//ICriteria criteria = session.CreateCriteria(typeof(User));//添加查询条件为传入的参数等于实体类中的属性//criteria.Add(Restrictions.Eq("UserName", userName));//User user = criteria.UniqueResult();

User user=session

.CreateCriteria(typeof(User))

.Add(Restrictions.Eq("UserName", userName))

.UniqueResult();returnuser;

}

}//查询多条纪录

public ICollectionGetAllUsers()

{using (ISession session =NHibernateHelper.SessionFactory.OpenSession())

{

IList list = session.CreateCriteria(typeof(User)).List();returnlist;

}

}//校验登录

public bool VerifyUser(string userName, stringpassword)

{using (ISession session =NHibernateHelper.SessionFactory.OpenSession())

{

User user=session

.CreateCriteria(typeof(User))

.Add(Restrictions.Eq("UserName", userName))

.Add(Restrictions.Eq("UserPwd", password))

.UniqueResult();if (user == null)return false;else

return true;

}

}

}

}

在主函数中调用增删改查方法。

usingNHibernateConnectMySQL.Manager;usingSystem;namespaceNHibernateConnectMySQL

{classProgram

{static void Main(string[] args)

{UserManager userManager= newUserManager();//插入数据//User user = new User() { UserName = "3643uhyrjut", UserPwd = "123453143" };//UserManager userManager = new UserManager();//userManager.Add(user);//查询单条纪录//User user = userManager.GetUserByUserName("agr43");//Console.WriteLine(user.UserPwd);//查询多条纪录//ICollection list = userManager.GetAllUsers();//foreach (User item in list)//{//Console.WriteLine(item.UserPwd);//}//验证登录//Console.WriteLine(userManager.VerifyUser("jjssag1", "4606519"));

Console.ReadKey();

}

}

}

坑点如果当前解决方案下有多个项目,在总的配置文件中(hibernate.cfg.xml)一定要指定是哪个程序集,或者代码中用conf.AddAssembly()指定!否则报错如下图:

b70aafabbedb372ca11804775f630d5e.png

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值