Nhibernate系列学习之(二) 简单增删改查
实例中解决方案简单的创建三层架构,符合开发过程中最简单的运用;

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


USE [TestDb]
GO
/****** 对象: Table [dbo].[T_School] 脚本日期: 03/01/2014 19:45:45 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE 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
{
/// <summary>
/// ID
/// </summary>
public virtual Guid ID
{
get;
set;
}
/// <summary>
/// SchoolName
/// </summary>
public virtual string SchoolName
{
get;
set;
}
/// <summary>
/// BuildDate
/// </summary>
public virtual DateTime? BuildDate
{
get;
set;
}
/// <summary>
/// Address
/// </summary>
public virtual string Address
{
get;
set;
}
/// <summary>
/// 高级
/// </summary>
public virtual bool IsSenior
{
get;
set;
}
/// <summary>
/// 人数
/// </summary>
public virtual int? StudentNum
{
get;
set;
}
}
}


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


<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="Maticsoft" namespace="Maticsoft">
<class name="Wujy.ModelLibrary.Entity.SchoolModel, Wujy.ModelLibrary" table="T_School">
<id name="ID" column="ID" type="Guid"></id>
<property name="SchoolName" column="SchoolName" type="string" />
<property name="BuildDate" column="BuildDate" type="DateTime" />
<property name="Address" column="Address" type="string" />
<property name="IsSenior" column="IsSenior" type="bool" />
<property name="StudentNum" column="StudentNum" type="int" />
</class>
</hibernate-mapping>


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<SchoolModel>(ID);
} public IList<SchoolModel> GetSchoolList()
{
IList<SchoolModel> list = null;
list = isession.QueryOver<SchoolModel>().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<SchoolModel> GetSchoolList()
{
return new SchoolDal().GetSchoolList();
}
}
}


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


<?xml version="1.0" encoding="utf-8" ?>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
<session-factory name="NHibernateConfig">
<property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>
<property name="connection.connection_string">Server=localhost;uid=sa;password=admin;database=TestDb</property>
<property name="dialect">NHibernate.Dialect.MsSql2005Dialect</property>
<property name="command_timeout">10</property>
<mapping assembly="Wujy.ModelLibrary"/><!--表示映射Wujy.ModelLibrary实体程序集下的所有类,就不用一个个去映射-->
</session-factory>
</hibernate-configuration>


Nhibernate系列学习之(二) 简单增删改查的更多相关文章
- NHibernate初学一之简单增删改查
以前有简单了解NHibernate,但因项目一直没有运用所以也没有机会进行一个详细了解:最近利用一点空闲的时间认真学习它:同样希望把学习过程进行简单记录,今天简单写一个针对MSSQL数据库的增删改查的 ...
- Redis:五种数据类型的简单增删改查
Redis简单增删改查例子 例一:字符串的增删改查 #增加一个key为ay_key的值 127.0.0.1:6379> set ay_key "ay" OK #查询ay_ke ...
- ado.net的简单数据库操作(三)——简单增删改查的实际应用
果然,在犯困的时候就该写写博客,写博客就不困了,哈哈! 上篇我记录了自己的SqlHelper的开发过程,今天记录一下如何使用这个sqlhelper书写一个具有简单增删改查的小实例啦. 实例描述:在数据 ...
- 国产化之路-统信UOS + Nginx + Asp.Net MVC + EF Core 3.1 + 达梦DM8实现简单增删改查操作
专题目录 国产化之路-统信UOS操作系统安装 国产化之路-国产操作系统安装.net core 3.1 sdk 国产化之路-安装WEB服务器 国产化之路-安装达梦DM8数据库 国产化之路-统信UOS + ...
- Mybatis实现简单增删改查
Mybatis的简单应用 学习内容: 需求 环境准备 代码 总结: 学习内容: 需求 使用Mybatis实现简单增删改查(以下是在IDEA中实现的,其他开发工具中,代码一样) jar 包下载:http ...
- MyBatis之二:简单增删改查
这一篇在上一篇的基础上简单讲解如何进行增删改查操作. 一.在mybatis的配置文件conf.xml中注册xml与注解映射 <!-- 注册映射文件 --> <mappers> ...
- ASP.NET MVC学习---(三)EF简单增删改查
那么现在我们已经大概从本质上了解了ef 巴拉巴拉说了一大堆之后 总算要进入ef的正题了 总在口头说也太不行了是吧~ 没错,现在要用ef进行一些实际的操作 做什么呢? 就做一个入门级的增删改查操作吧 废 ...
- SpringBoot整合MongoDB JPA,测试MongoRepository与MongoTemplate用法,简单增删改查+高级聚合
源码 地址 -> https://github.com/TaoPanfeng/case/tree/master/04-mongo/springboot-mongo 一 引入依赖 <depe ...
- linq的简单增删改查
Linq高集成化的数据访问类,它会自动映射数据库结构,将表名完整映射成为类名,将列名完整映射成字段名数据库数据访问,能大大减少代码量.(反正最后结果就是不用写ado.Net那一套增删改查,有一套封装好 ...
- Android_ADB 常用 shell命令 和 sqlite3 简单增删改查
今天学习了一个ADB的常用命令.接下来简单使用几个常用ADB shell 命令. 首先我们得明白什么是adb.exe ADB -Android Debug Bridge, 是 Android sdk ...
随机推荐
- Java基础—序列化与反序列化(转载)
转载自: Java序列化与反序列化 1.Java序列化与反序列化 Java序列化是指把Java对象转换为字节序列的过程:而Java反序列化是指把字节序列恢复为Java对象的过程. 2.为什么需要序列化 ...
- spring boot 2.0添加对fastjson的支持
首先引入fastjson的maven依赖: <dependency> <groupId>com.alibaba</groupId> <artifactId&g ...
- 20170520 BADI增强学习
一.要求:Tcode:FF_5 导入数据运行时,产生财务凭证之前修改某些字段值.Exmp:FEBRE-VWEZWBKPF-XBLNRFEBEP-CHECTBSEG-ZUONR there is a b ...
- Python基础-文件的基本操作
测试文件fansik内容如下:This is line 1This is line 2This is line 3This is line 4This is line 5This is line 6 ...
- 希望and目标
软件工程是一门枯燥的课程,这门课我不喜欢上,容易犯困,但就因为如此.我不得不好好的学习,我希望在这门课上.我能将基础学扎实,在实践上可以自己慢慢研究,我的目标不是很远大,学好.学扎实..在这门课上一周 ...
- python之路(sed,函数,三元运算)
python之路(sed,函数,三元运算) 一.sed集合 1.set无序,不重复序列 2.创建 se = {11,22,33,33,44} list() #只要是一个类加上()自动执行 list _ ...
- (转)【腾讯 TMQ】 接口测试用例设计
导语 这是我在其他的开源社区看到的一篇分享帖子.这篇文章的目的只是为大家提供一个思路,但是实现成本太高了,因为一个接口设计的接口测试用例很多,一般公司的接口数量几百到上千不等,每一个接口都设计这么多测 ...
- OpenGL学习进程(8)第六课:点、边和图形(三)绘制图形
本节是OpenGL学习的第六个课时,下面介绍OpenGL图形的相关知识: (1)多边形的概念: 多边形是由多条线段首尾相连而形成的闭合区域.OpenGL规定,一个多边形必须是一个“凸多边形”. ...
- QtGstreamer 编译
一 安装依赖项 1 安装cmake hdhuang@hdh-UBT:~/gstreamer/qt-gstreamer-0.10.2/build$ sudo apt-get install cmake ...
- SOA 面向服务架构 阅读笔记(三)
7 SOA的主要组件 7.1企业服务总线ESB ESB负责SOA组件之间的互相通信;SOA注册中心的资源库包含表示SOA组件的位置的重要的引用信息: 业务流程编排管理器提供人与人,人与流程,以及流程的 ...