博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
NHibernate初学一之简单增删改查
阅读量:6358 次
发布时间:2019-06-23

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

以前有简单了解NHibernate,但因项目一直没有运用所以也没有机会进行一个详细了解;最近利用一点空闲的时间认真学习它;同样希望把学习过程进行简单记录,今天简单写一个针对MSSQL数据库的增删改查的小实例,作为进行学习NHibernate第一步

一:ORM理论

ORM是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中。本质上就是将数据从一种形式转换到另一种形式。数据持久化:就是将内存中的 数据模型转换为存储模型,以及将存储模型转换为内存中的数据模型的统称。在应用程序中能永久地保存各个处理状态信息的机制。如果没有持久化这个机制,状态只能保存在内存中,机器关机后就会丢失。

二:NHibernate简介

NHibernate就是用于做数据持久化相关的编程工作,能够使开发人员从原来枯燥的SQL语句的编写中解放出来,解放出来的精力可以让开发人员投入到业务逻辑的实现。NHibernate是由一个Java开源项目Hibernate发展来而来。与数据库打交道主要是用NHibernate,NHibernate的开发者尝试为其提供与Hibernate类似的API。使用前我们需要下载Nhibernate,

下载地址:http://sourceforge.net/projects/nhibernate/files/NHibernate/。

NHibernate-3.3.3.GA-src.zip 是源文件,里面有源代码以及连接各种数据库的写法模板。

NHibernate-3.3.3.GA-bin.zip 是使用文件,解压后能直接使用的dll。在接下的实例中,使用的NHibernate-3.3.3GA版本

三:NHibernate实例

实例中解决方案简单的创建三层架构,符合开发过程中最简单的运用;

 

1:首先在数据库中创建一个表T_School,脚本如下:

USE [TestDb]GO/****** 对象:  Table [dbo].[T_School]    脚本日期: 03/01/2014 19:45:45 ******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOCREATE TABLE [dbo].[T_School](    [ID] [uniqueidentifier] NOT NULL,    [SchoolName] [nvarchar](255) COLLATE Chinese_PRC_CI_AS NULL,    [BuildDate] [datetime] NULL,    [Address] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL,    [IsSenior] [bit] NULL,    [StudentNum] [int] NULL) ON [PRIMARY]

2:创建实体层Model,实体中的字段还以virtual进行修饰

namespace Wujy.ModelLibrary.Entity{    public class SchoolModel    {        ///         /// ID        ///         public virtual Guid ID        {            get;            set;        }        ///         /// SchoolName        ///         public virtual string SchoolName        {            get;            set;        }        ///         /// BuildDate        ///         public virtual DateTime? BuildDate        {            get;            set;        }        ///         /// Address        ///         public virtual string Address        {            get;            set;        }        ///         /// 高级        ///         public virtual bool IsSenior        {            get;            set;        }        ///         /// 人数        ///         public virtual int? StudentNum        {            get;            set;        }            }}

2.1 此处还增加NHibernate需要的XML映射文件,以实体名+hbm.xml结尾并且还要设置其生成操作为"嵌入的资源";其中Class中的name是指实体类的完整名及类库名称,代码如下

3:创建一个类库作为DAL层,此处我们引用NHibernate两个DLL,分别为NHibernate.dll及Iesi.Collection.dll;此处创建一个帮助类NHibernateHelper用于ISessionFactory;

using NHibernate;using NHibernate.Cfg;namespace Wujy.DalLibrary.DalHelp{    public class NHibernateHelper    {        private ISessionFactory _sessionFactory;        public NHibernateHelper()        {            _sessionFactory = GetSessionFactory();        }        private ISessionFactory GetSessionFactory()        {            return (new Configuration()).Configure().BuildSessionFactory();        }        public ISession GetSession()        {            return _sessionFactory.OpenSession();        }    }}

3.1:创建类SchoolDal并把一些操作的代码写入,如查不用transaction.Commit()则要运和isession.Flush()否则无法执行SQL就没有效果:

using Wujy.ModelLibrary.Entity;using NHibernate;using Wujy.DalLibrary.DalHelp;namespace Wujy.DalLibrary{    public class SchoolDal    {        private ISession isession;        public SchoolDal()        {            isession = new NHibernateHelper().GetSession();        }        public void Add(SchoolModel model)        {            //如查不用transaction.Commit()则要运和isession.Flush()否则无法执行SQL就没有效果            //ITransaction transaction = isession.BeginTransaction();            //isession.Save(model);            //transaction.Commit();            isession.Save(model);            isession.Flush();        }        public bool Update(SchoolModel model)        {            try            {                isession.Update(model);                isession.Flush();                return true;            }            catch (Exception ex)            {                return false;            }            finally            {                isession.Close();            }        }        public bool Delete(SchoolModel model)        {            try            {                isession.Delete(model);                isession.Flush();                return true;            }            catch (Exception ex)            {                return false;            }            finally            {                isession.Close();            }        }        public SchoolModel GetSchoolById(Guid ID)        {            return isession.Get
(ID); } public IList
GetSchoolList() { IList
list = null; list = isession.QueryOver
().List(); return list; } }}

4:因为本实例重点是对NHibernate运用,对于逻辑层就简单的引用;代码也很简单:

using Wujy.ModelLibrary.Entity;using Wujy.DalLibrary;namespace Wujy.BllLibrary{    public class SchoolBll    {        public static void Add(SchoolModel model)         {            new SchoolDal().Add(model);        }        public static bool Update(SchoolModel model)        {            return new SchoolDal().Update(model);        }        public static bool Delete(SchoolModel model)        {            return new SchoolDal().Delete(model);        }        public static SchoolModel GetSchoolById(Guid ID)        {            return new SchoolDal().GetSchoolById(ID);        }        public static IList
GetSchoolList() { return new SchoolDal().GetSchoolList(); } }}

5:WebUI除简单调用BLL层外,另一个比较重要是NHibernate连接数据库的配置文件,其中其属性复制到输出目录改为"始终复制";Hibernate.cfg.xml内容:

NHibernate.Driver.SqlClientDriver
Server=localhost;uid=sa;password=admin;database=TestDb
NHibernate.Dialect.MsSql2005Dialect
10

 

 

感谢您的阅读,坚持每天进步一点点,离成功就更新一步;希望文章对您有所帮助;

转载至:http://www.cnblogs.com/wujy/p/3575542.html

你可能感兴趣的文章
zabbix 邮件报警 -- sendmail
查看>>
JavaScript异步编程
查看>>
tcpdump用法小记
查看>>
MySQL基础安全注意细节
查看>>
Oracle随机函数—dbms_random
查看>>
pvr 批量转换
查看>>
linux命令basename使用方法
查看>>
windows下开发库路径解决方案
查看>>
linux迁移mysql数据目录
查看>>
脚本源码安装LNMP
查看>>
Percona Server安装
查看>>
函数为左边表达式
查看>>
2015.06.04 工作任务与心得
查看>>
icinga2使用587端口发邮件
查看>>
hpasmcli查看HP服务器内存状态
查看>>
【14】Python100例基础练习(1)
查看>>
boost bind使用指南
查看>>
使用ntpdate更新系统时间
查看>>
Android M 特性 Doze and App Standby模式详解
查看>>
IE FF(火狐) line-height兼容详解
查看>>