学习ado.net(7):一起入门NHibernate
Hibernate是一个非常优秀的针对关系型数据库的对象持久化类库, 可以大大简化数据库操作, NHibernate是Hibernate的for .net版本。当然大家用了之后就会发现NHibernate好像是替代了我们的ado.net。但是NHibernate的内部能离开ado.net吗? 所以,把NHibernate资料在ado.net这里一并列出来。
什么是NHibernate
NHibernate 是一个基于.Net 的针对关系型数据库的对象持久化类库。
Nhibernate 来源于非常优秀的基于Java的Hibernate 关系型持久化工具。
NHibernate 从数据库底层来持久化你的.Net 对象到关系型数据库。NHibernate 为你处理这些,远胜于你不得不写SQL去从数据库存取对象。你的代码仅仅和对象关联,NHibernat 自动产生SQL语句,并确保对象提交到正确的表和字段中去。
使用NHibernate 的步骤
1.新建一个将要持久化.Net对象的表
2.构建一个需要被持久化的.Net类
3.构建一个可以让NHibernate知道如何持久化对象属性的映射文件
4.构建一个让NHibernate知道如何连接数据库的配置文件
5.使用NHibernate的API
2、3步骤可使用第三方工具做,如CodeSmithPro
1.新建一个将要持久化.Net对象的表
create table Dep
(
depId int primary key identity(1,1),
depName varchar(20)
)
go
create table Emp
(
empId int primary key identity(1,1),
depId int,
empName varchar(20),
empAge int
)
go
--关系
ALTER TABLE Emp WITH
CHECK ADD CONSTRAINT FK_Emp_Dep FOREIGN KEY(depId)
REFERENCES Dep (depId)
GO
ALTER TABLE Emp CHECK CONSTRAINT FK_Emp_Dep
go
2.构建一个需要被持久化的.Net类 3.构建一个可以让NHibernate知道如何持久化对象属性的映射文件
4.构建一个让NHibernate知道如何连接数据库的配置文件
5.使用NHibernate的API
5.1 基本操作-增
Entity.Dep dep = new FirstHib.Entity.Dep();
dep.DepName = "开发部";
NHibernate.ISession seon = Hib.SessionFac.OpenSession();
seon.Save(dep);
seon.Flush();
seon.Close();
5.2 基本操作-删 -1
NHibernate.ISession seon = Hib.SessionFac.OpenSession();
seon. Delete(dep);
seon.Flush();
seon.Close();
5.3 基本操作-删 -2
NHibernate.ISession seon = Hib.SessionFac.OpenSession();
seon.Delete("From FirstHib.Entity.Dep as d where d..DepId.=1");
seon.Flush();
seon.Close();
5.4 基本操作-改
NHibernate.ISession seon = Hib.SessionFac.OpenSession();
seon.Update(dep, 1);
seon.Flush();
seon.Close();
5.5 基本操作-查 - 根据主键查
Entity.Dep dep = new FirstHib.Entity.Dep();
NHibernate.ISession seon = Hib.SessionFac.OpenSession();
seon.Load(dep, 1);
seon.Flush();
seon.Close();
5.6 基本操作-查 - 使用HQL查
NHibernate.ISession seon = Hib.SessionFac.OpenSession();
NHibernate.IQuery qu = seon.CreateQuery(
"From FirstHib.Entity.Dep as d where d.DepName like '%开发%'");
IList depList = qu.List();
seon.Flush();
seon.Close();
5.7 基本操作-查 - 使用Criteria查
NHibernate.ISession seon = Hib.SessionFac.OpenSession();
NHibernate.ICriteria criteria = seon.CreateCriteria(typeof(Entity.Dep));
criteria.Add(
NHibernate.Expression.Expression.Like("DepName", "zs")
);
//criteria.AddOrder(
// NHibernate.Expression.Order.Desc("DepId")
//);
IList list = criteria.List();
seon.Flush();
seon.Close();
5.8 事务
太简单,就不写了, 翻翻文档
5.9 翻页
a.使用 GridView内置分页
b.使用Criteria分页
criteria.SetMaxResults(页面大小);
criteria.SetFirstResult(起始记录号);
5.10 一对多映射
太简单,就不写了, 翻翻文档
提供下载的资料包括
1、NHibernate v1.2.0
2、CodeSmith nhibernate_template
3、CodeSmith 请自己到网上搜索下载