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

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

  1. USE [TestDb]
  2. GO
  3. /****** 对象: Table [dbo].[T_School] 脚本日期: 03/01/2014 19:45:45 ******/
  4. SET ANSI_NULLS ON
  5. GO
  6. SET QUOTED_IDENTIFIER ON
  7. GO
  8. CREATE TABLE [dbo].[T_School](
  9. [ID] [uniqueidentifier] NOT NULL,
  10. [SchoolName] [nvarchar](255) COLLATE Chinese_PRC_CI_AS NULL,
  11. [BuildDate] [datetime] NULL,
  12. [Address] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL,
  13. [IsSenior] [bit] NULL,
  14. [StudentNum] [int] NULL
  15. ) ON [PRIMARY]

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

  1. namespace Wujy.ModelLibrary.Entity
  2. {
  3. public class SchoolModel
  4. {
  5. /// <summary>
  6. /// ID
  7. /// </summary>
  8. public virtual Guid ID
  9. {
  10. get;
  11. set;
  12. }
  13. /// <summary>
  14. /// SchoolName
  15. /// </summary>
  16. public virtual string SchoolName
  17. {
  18. get;
  19. set;
  20. }
  21. /// <summary>
  22. /// BuildDate
  23. /// </summary>
  24. public virtual DateTime? BuildDate
  25. {
  26. get;
  27. set;
  28. }
  29. /// <summary>
  30. /// Address
  31. /// </summary>
  32. public virtual string Address
  33. {
  34. get;
  35. set;
  36. }
  37. /// <summary>
  38. /// 高级
  39. /// </summary>
  40. public virtual bool IsSenior
  41. {
  42. get;
  43. set;
  44. }
  45. /// <summary>
  46. /// 人数
  47. /// </summary>
  48. public virtual int? StudentNum
  49. {
  50. get;
  51. set;
  52. }
  53. }
  54. }

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

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

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

  1. using NHibernate;
  2. using NHibernate.Cfg;
  3.  
  4. namespace Wujy.DalLibrary.DalHelp
  5. {
  6. public class NHibernateHelper
  7. {
  8. private ISessionFactory _sessionFactory;
  9. public NHibernateHelper()
  10. {
  11. _sessionFactory = GetSessionFactory();
  12. }
  13. private ISessionFactory GetSessionFactory()
  14. {
  15. return (new Configuration()).Configure().BuildSessionFactory();
  16. }
  17. public ISession GetSession()
  18. {
  19. return _sessionFactory.OpenSession();
  20. }
  21. }
  22. }

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

  1. using Wujy.ModelLibrary.Entity;
  2. using NHibernate;
  3. using Wujy.DalLibrary.DalHelp;
  4.  
  5. namespace Wujy.DalLibrary
  6. {
  7. public class SchoolDal
  8. {
  9. private ISession isession;
  10.  
  11. public SchoolDal()
  12. {
  13. isession = new NHibernateHelper().GetSession();
  14. }
  15.  
  16. public void Add(SchoolModel model)
  17. {
  18. //如查不用transaction.Commit()则要运和isession.Flush()否则无法执行SQL就没有效果
  19. //ITransaction transaction = isession.BeginTransaction();
  20. //isession.Save(model);
  21. //transaction.Commit();
  22. isession.Save(model);
  23. isession.Flush();
  24. }
  25.  
  26. public bool Update(SchoolModel model)
  27. {
  28. try
  29. {
  30. isession.Update(model);
  31. isession.Flush();
  32. return true;
  33. }
  34. catch (Exception ex)
  35. {
  36. return false;
  37. }
  38. finally
  39. {
  40. isession.Close();
  41. }
  42. }
  43.  
  44. public bool Delete(SchoolModel model)
  45. {
  46. try
  47. {
  48. isession.Delete(model);
  49. isession.Flush();
  50. return true;
  51. }
  52. catch (Exception ex)
  53. {
  54. return false;
  55. }
  56. finally
  57. {
  58. isession.Close();
  59. }
  60. }
  61.  
  62. public SchoolModel GetSchoolById(Guid ID)
  63. {
  64. return isession.Get<SchoolModel>(ID);
  65. }
  66.  
  67. public IList<SchoolModel> GetSchoolList()
  68. {
  69. IList<SchoolModel> list = null;
  70. list = isession.QueryOver<SchoolModel>().List();
  71. return list;
  72. }
  73. }
  74. }

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

  1. using Wujy.ModelLibrary.Entity;
  2. using Wujy.DalLibrary;
  3.  
  4. namespace Wujy.BllLibrary
  5. {
  6. public class SchoolBll
  7. {
  8. public static void Add(SchoolModel model)
  9. {
  10. new SchoolDal().Add(model);
  11. }
  12.  
  13. public static bool Update(SchoolModel model)
  14. {
  15. return new SchoolDal().Update(model);
  16. }
  17.  
  18. public static bool Delete(SchoolModel model)
  19. {
  20. return new SchoolDal().Delete(model);
  21. }
  22.  
  23. public static SchoolModel GetSchoolById(Guid ID)
  24. {
  25. return new SchoolDal().GetSchoolById(ID);
  26. }
  27.  
  28. public static IList<SchoolModel> GetSchoolList()
  29. {
  30. return new SchoolDal().GetSchoolList();
  31. }
  32. }
  33. }

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

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

Nhibernate系列学习之(二) 简单增删改查的更多相关文章

  1. NHibernate初学一之简单增删改查

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

  2. Redis:五种数据类型的简单增删改查

    Redis简单增删改查例子 例一:字符串的增删改查 #增加一个key为ay_key的值 127.0.0.1:6379> set ay_key "ay" OK #查询ay_ke ...

  3. ado.net的简单数据库操作(三)——简单增删改查的实际应用

    果然,在犯困的时候就该写写博客,写博客就不困了,哈哈! 上篇我记录了自己的SqlHelper的开发过程,今天记录一下如何使用这个sqlhelper书写一个具有简单增删改查的小实例啦. 实例描述:在数据 ...

  4. 国产化之路-统信UOS + Nginx + Asp.Net MVC + EF Core 3.1 + 达梦DM8实现简单增删改查操作

    专题目录 国产化之路-统信UOS操作系统安装 国产化之路-国产操作系统安装.net core 3.1 sdk 国产化之路-安装WEB服务器 国产化之路-安装达梦DM8数据库 国产化之路-统信UOS + ...

  5. Mybatis实现简单增删改查

    Mybatis的简单应用 学习内容: 需求 环境准备 代码 总结: 学习内容: 需求 使用Mybatis实现简单增删改查(以下是在IDEA中实现的,其他开发工具中,代码一样) jar 包下载:http ...

  6. MyBatis之二:简单增删改查

    这一篇在上一篇的基础上简单讲解如何进行增删改查操作. 一.在mybatis的配置文件conf.xml中注册xml与注解映射 <!-- 注册映射文件 --> <mappers> ...

  7. ASP.NET MVC学习---(三)EF简单增删改查

    那么现在我们已经大概从本质上了解了ef 巴拉巴拉说了一大堆之后 总算要进入ef的正题了 总在口头说也太不行了是吧~ 没错,现在要用ef进行一些实际的操作 做什么呢? 就做一个入门级的增删改查操作吧 废 ...

  8. SpringBoot整合MongoDB JPA,测试MongoRepository与MongoTemplate用法,简单增删改查+高级聚合

    源码 地址 -> https://github.com/TaoPanfeng/case/tree/master/04-mongo/springboot-mongo 一 引入依赖 <depe ...

  9. linq的简单增删改查

    Linq高集成化的数据访问类,它会自动映射数据库结构,将表名完整映射成为类名,将列名完整映射成字段名数据库数据访问,能大大减少代码量.(反正最后结果就是不用写ado.Net那一套增删改查,有一套封装好 ...

  10. Android_ADB 常用 shell命令 和 sqlite3 简单增删改查

    今天学习了一个ADB的常用命令.接下来简单使用几个常用ADB shell 命令. 首先我们得明白什么是adb.exe ADB -Android Debug Bridge, 是 Android sdk ...

随机推荐

  1. 《Python数据分析》笔记1 ——Numpy

    Numpy数组 1.Numpy数组对象 Numpy中的多维数组称为ndarray,他有两个组成部分. 1.数据本身 2.描述数据的元数据 2.Numpy的数值类型 bool: 布尔型 inti:其长度 ...

  2. C#类和结构(1)

    1.结构功能特性? 实现代码? 结构用struct关键字定义的,与类类似,但有本质区别.结构实质是一个值类型,它不需要对分配的. 结构的特性: (1).结构作为参数传递时,是值传递. (2).结构的构 ...

  3. iOS学习之库

    一.什么是库 库是程序代码的集合,是共享程序代码的一种方式. 二.库的分类 根据源代码的公开情况,库可以分为2种类型. 1.开源库 公开源代码,能看到具体实现. 比如,SDWebImage.AFNet ...

  4. PHP领域类型Java中ibatis的API

    最近公司技术调整,要把java用php换掉,其中java主要的工作就是查询数据库,并返回json,ORM用的是ibatis,主要用到了Object映射和动态SQL,组员们用的都挺6,转到PHP后,发现 ...

  5. Linux Shell基础 环境变量

    环境变量 环境变量和用户自定义变量最主要的区别在于,环境变量是全局变量,而用户自定义变量是局部变量.用户自定义变量只在当前的 Shell 中生效,而环境变量会在当前 Shell 和这个 Shell 的 ...

  6. Android DDMS应用

    具体可见http://developer.android.com/tools/debugging/ddms.html. DDMS为IDE和emultor.真正的android设备架起来了一座桥梁.开发 ...

  7. 交叉编译Mesa,X11lib,Qt opengl

    记录Mesa配置文件如下: Mesa版本:Mesa-10.2.3 CC=/usr/local/arm-4.8.1/bin/arm-none-linux-gnueabi-gcc CXX=/usr/loc ...

  8. INSPIRED启示录 读书笔记 - 第26章 合理运用敏捷方法

    十大秘诀 1.产品经理即是产品负责人,他代表了客户的需求,因而需要与产品开发团队保持密切的联系,协助督促开发进程,及时解决出现的问题 2.使用敏捷方法绝不等于省略产品规划.规划周期应该适度缩短,反复迭 ...

  9. Java I/O 小结

    主要内容: 一.输入流基类:InputStream 和 OutputStream(字节流). Reader 和 Writer(字符流) 二.文件字节流:FileInputStream和FileOutp ...

  10. 音乐下载api

    青檬音乐 http://tingapi.ting.baidu.com/v1/restserver/ting?from=android&version=5.6.5.6&format=js ...