NHibernate系列学习(一)-看看用NH怎么做增速改查
1.本次所有代码是在一下环境下运行的
| 学习系统:win8 64bit 开发环境:VS2013,MSSQL2012 NHibernate版本:NHibernate-4.0.3.GA 【文章结尾有本次笔记下载链接,里面只包含需要的程序集】 运行环境:.Net Framework 4.5 | 
2.什么是NHibernate
NHibernate是ORM框架中的一种,那么什么是ORM框架,我在MVC那边有一篇介绍EF框架时说过。
大家可以看看这篇文章什么是ORM框架
这里就强调一句话:【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
<?xml version="1.0" encoding="utf-8"?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" default-lazy="false">
<class name="Test.Student,Test" table="T_Student">
<id name="Id" column="sId" type="int">
<generator class="native" />
</id>
<property name="Name" column="sName" type="string" />
<property name="Age" column="sAge" type="int" />
</class>
</hibernate-mapping>
说明:
| <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
<?xml version="1.0" encoding="utf-8" ?>
<configuration> <configSections>
<section name="hibernate-configuration" type="NHibernate.Cfg.ConfigurationSectionHandler,NHibernate" requirePermission="false"/>
</configSections> <hibernate-configuration xmlns="urn:nhibernate-configuration-2.2" >
<session-factory>
<property name="connection.provider">NHibernate.Connection.DriverConnectionProvider, NHibernate</property>
<property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>
<property name="connection.connection_string">Server=(local);initial catalog=KimDB;Integrated Security=SSPI</property>
<property name="show_sql">true</property>
<property name="dialect">NHibernate.Dialect.MsSql2012Dialect</property>
</session-factory>
</hibernate-configuration> <startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
</configuration>
说明:
| <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.代码下载
NHibernate系列学习(一)-看看用NH怎么做增速改查的更多相关文章
- sqlHelper做增删改查,SQL注入处理,存储值,cookie,session
		一.存储值 eg:登录一个页面,在进入这个页面之前你怎么知道它登没登录呢?[在登录成功之后我们把状态保存起来] 存储值得方式有两种,一种是cookie,一种是session 1.1区别: 代码: if ... 
- java对xml文件做增删改查------摘录
		java对xml文件做增删改查 package com.wss; import java.io.File;import java.util.ArrayList;import java.util.Lis ... 
- MVC学习-用EF做增删改查
		在做增删改查先,先介绍几个知识点: 1.代理类 在将对象方法EF数据上下文时,EF会为该对象封装 一个代理类对象, 同时为该对象的每一个属性添加一个标志:unchanged, 当对该对象某个属性进行操 ... 
- Nhibernate系列学习之(三) Criteria查询表达式增删改查
		Criteria查询表达式: 正如我们所见,Expression对查询语句的表达式进行了封装和限制,下表列出了Expression所有的方法,以及每个方法所对应的查询表达式及其限制. Restrict ... 
- Nhibernate系列学习之(一) ORM and Nhibernate入门实例解析
		最近框架项目需要,数据层想使用Nhibernate,代替传统的sql语句的写法,更加使用面向对象的思维来维护实体与数据库的这层关系映射(ORM),好在之前接触过Java时学习使用了Hibernate, ... 
- Nhibernate系列学习之(五) 存储过程
		NHibernate也是能够操作存储过程的,不过第一次配置可能会碰到很多错误. 一.删除 首先,我们新建一个存储过程如下: CREATE PROC DeletePerson @Id int AS DE ... 
- Nhibernate系列学习之(四) 数据操作
		数据操作,在这里主要介绍INSERT.UPDATE.DELETE.我们在使用NHibernate的时候,如果只是查询数据,不需要改变数据库的值,那么是不需要提交或者回滚到数据库的. 一.INSERT ... 
- Nhibernate系列学习之(二) 简单增删改查
		实例中解决方案简单的创建三层架构,符合开发过程中最简单的运用: 1:首先在数据库中创建一个表T_School,脚本如下: USE [TestDb] GO /****** 对象: Table [dbo] ... 
- NHibernate系列学习(三)-条件查询Criteria
		1.本笔记主要介绍Criteria的使用 2.效果界面 3.代码详情 namespace KimismeDemo { public partial class Form3 : Form { priva ... 
随机推荐
- 【Codeforces 476C】Dreamoon and Sums
			[链接] 我是链接,点我呀:) [题意] 让你求出所有x的和 其中 (x div b)是(x mod b)的倍数 且x mod b不等于0 且(x div b)除(x mod b)的值(假设为k),k ... 
- 实例:Mongodb集群配置过程
			最近因为一些项目公司开始采用Mongodb做为大量的数据存储,通过网络上大量的资源自己已经掌握一套可行的Mongodb集群配置过程,Mongodb具有无规则存储.大数据存储.多平台支持.强大的扩展插件 ... 
- PHP htmlentities 和 htmlspecialchars的区别
			一直对这两个转换htm字符为html实体的函数混淆不清,查询了一下文档,总结如下 htmlentities: Convert all applicable characters to HTML ent ... 
- ajax多文件上传,js原生ajax请求(转)
			function uploadImageFile(){ var xhr = new XMLHttpRequest(); //定义表单变量 var file = document.getElementB ... 
- tomcat这种http服务器,是能接收到客户端的断开信息的,并能打印出来
			如,tomcat的运行文件 DEBUG -- CLOSE BY CLIENT STACK TRACE 
- 创建NetCore2.2 Web项目+EFCore+SQLServer
			在空余时间学习下NetCore,记录日常,供参考. 1.确保已下载安装NetCore2.2SDK 环境,下载地址:https://dotnet.microsoft.com/download/dotne ... 
- Cocos2d-X中的菜单
			在Cocos2d-X实现显示菜单的方式比較特殊,首先须要使用CCMenu创建一个菜单,然后使用CCMenuItem创建一个菜单项,实际上程序中显示的菜单是使用CCMenu和CCMenuItemFont ... 
- 基于Linux下的UDP编程
			一. Linux下UDP编程框架 使用UDP进行程序设计可以分为客户端和服务器端两部分. 1.服务器端程序包括: Ø 建立套接字 Ø 将套接字地址结构进行绑定 Ø 读写数据 Ø 关闭套接字 2 ... 
- putty SSH出现乱码
			解决方法如下: 打开PuTTY主程序 选择window-〉Appearance-〉Font settings-〉点击Change.按钮,字体中选择"新宋体". 选择window-〉 ... 
- Azure Event hub usage
			1. create event hub on azure watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/40 ... 
