博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
NHibernate系列学习(一)-看看用NH怎么做增速改查
阅读量:5064 次
发布时间:2019-06-12

本文共 5143 字,大约阅读时间需要 17 分钟。

1.本次所有代码是在一下环境下运行的

学习系统:win8 64bit
开发环境:VS2013,MSSQL2012
NHibernate版本:NHibernate-4.0.3.GA 【文章结尾有本次笔记下载链接,里面只包含需要的程序集】
运行环境:.Net Framework 4.5

2.什么是NHibernate

NHibernate是ORM框架中的一种,那么什么是ORM框架,我在MVC那边有一篇介绍EF框架时说过。

大家可以看看这篇文章

这里就强调一句话:【ORM(Object Relational Mapping)是一种为了解决面向对象与关系型数据库互相匹配而存在的技术】。

3.开始NH之旅

本次学习的代码结构如下

第一步:在数据库中创建.net类持久化的对应表

create table T_Student  (    SId int primary key identity(1,1),    SName nvarchar(10),    SAge int  )

第二步:创建需要被持久化的.Net类

namespace Kimisme{    public class Student    {        public int Id { get; set; }        public string Name { get; set; }        public int Age { get; set; }    }}
第三步:创建映射文件,告诉NH怎么持久化这些类以及它的属性Student.hbm.xml

说明:

<class name="Test.Student,Test" table="T_Student"></class>:DotNet中类Student(命名空间.类名)对应数据库中表T_Student
<id name="Id" column="sId" type="int"></id>:类Student的字段Id对应于表T_Student中的SId
<generator class="native" />:native表示自动生成,因为表中tId设置了主键

第四步:创建NH的配置文件,告诉NH要连接什么数据库以及怎么连接数据库App.config

NHibernate.Connection.DriverConnectionProvider, NHibernate
NHibernate.Driver.SqlClientDriver
Server=(local);initial catalog=KimDB;Integrated Security=SSPI
true
NHibernate.Dialect.MsSql2012Dialect

说明:

<configSections> <section name="hibernate-configuration" /> </configSections>:NH配置文件,必须放在最上面
<property name="connection.provider"></property>:NH连接数据库提供程序
<property name="connection.driver_class"></property> :连接数据库的驱动程序
<property name="connection.connection_string"></property> :数据库连接
<property name="show_sql"></property> :是否显示sql语句
<property name="dialect"></property> :方言

第五步:使用NH提供的API做增速改查

首先看看本次完成后的界面 以及 代码层次:

4.终于可以敲代码了

首先要引用两个文件,一个是Kimisme类库,一个是NHibernate.dll

namespace KimismeDemo{    public partial class Form1 : Form    {        private ISession session = null;        private ISessionFactory factory = null;        private ITransaction trans = null;        public Form1()        {            InitializeComponent();        }        #region 0.初始化session以及session工厂 - private void Form1_Load(object sender, EventArgs e)        private void Form1_Load(object sender, EventArgs e)        {            Configuration config = new Configuration().AddAssembly("Kimisme");            factory = config.BuildSessionFactory();            session = factory.OpenSession();        }         #endregion        #region 1.0 添加学生 -  private void btnAdd_Click(object sender, EventArgs e)        private void btnAdd_Click(object sender, EventArgs e)        {            trans = session.BeginTransaction();            try            {                Student stu = new Student();                stu.Name = txtName.Text;                stu.Age = Convert.ToInt32(txtAge.Text);                session.Save(stu);                trans.Commit();                MessageBox.Show("添加成功");            }            catch (Exception ex)            {                trans.Rollback();                MessageBox.Show(ex.Message);            }        }         #endregion        #region 2.0 根据id查找学生 - private void btnSearch_Click(object sender, EventArgs e)        private void btnSearch_Click(object sender, EventArgs e)        {            try            {                Student stu = session.Get(typeof(Student), int.Parse(txtId.Text)) as Student;                MessageBox.Show("姓名:【" + stu.Name + "】年龄:" + stu.Age);            }            catch (Exception ex)            {                MessageBox.Show(ex.Message);            }        }         #endregion        #region 3.0 根据Id修改学生 -  private void btnEdit_Click(object sender, EventArgs e)        private void btnEdit_Click(object sender, EventArgs e)        {            trans = session.BeginTransaction();            try            {                Student stu = session.Get(typeof(Student), int.Parse(txtEditId.Text)) as Student;                stu.Name = txtEditName.Text;                stu.Age = Convert.ToInt32(txtEditAge.Text);                session.Update(stu);                trans.Commit();                MessageBox.Show("修改成功");            }            catch (Exception ex)            {                trans.Rollback();                MessageBox.Show(ex.Message);            }        }         #endregion        #region 4.0 根据id删除学生 - private void btnDelete_Click(object sender, EventArgs e)        private void btnDelete_Click(object sender, EventArgs e)        {            trans = session.BeginTransaction();            try            {                Student stu = session.Get(typeof(Student), int.Parse(txtDeleteId.Text)) as Student;                session.Delete(stu);                trans.Commit();                MessageBox.Show("删除成功");            }            catch (Exception ex)            {                trans.Rollback();                MessageBox.Show(ex.Message);            }        }         #endregion    }}

5.

转载于:https://www.cnblogs.com/kimisme/p/4621161.html

你可能感兴趣的文章
GIS+=地理信息+容器技术(4)——Docker执行
查看>>
js跨域解决方式
查看>>
java对象是如何创建的
查看>>
7-1 抓老鼠啊~亏了还是赚了? (20 分)
查看>>
《Python编程从入门到实践》学习笔记8(第9章:类)
查看>>
Hibernate
查看>>
fedora 使用 vnc 远程 fedora 28 主机
查看>>
cocos2dx + vs安装使用
查看>>
CentOS 7下安装Logstash ELK Stack 日志管理系统(上)
查看>>
自然数e这家伙怎么蹦跶出来的?
查看>>
经常使用命令 echo、@、call、pause、rem
查看>>
PHP设计模式之适配器模式
查看>>
康托尔定理是如何证明的?
查看>>
Google Guice结合模式
查看>>
Linux centos 主机名颜色设置 和 别名设置
查看>>
jquery自己主动旋转的登录界面的背景代码登录页背景图
查看>>
(64位oracle使用32位的PLSQL)安装64位的oracle数据库软件,使用32位的PLSQL Developer连接方法...
查看>>
JavaScipt面向对象编程----闭包
查看>>
ajax异步通讯 遮罩滚动栏,防止并发及误操作
查看>>
Cocos2d-x项目移植到WP8小记
查看>>