看了许多人的文章,将Ado.net 与NHibernate看作类似的东西,频繁将两者进行比较。对于那些朋友的观点,我不认同!
  
  我认为ado.net 和 nhibernate是完全不同层次的东西。 他们之间的关系有点类似于:封装了Win32 API调用的拖管对像与该Win32 API本身的关系。 

我本人对NHibernate没有研究。只是听同事讨论过,对于NHibernate的性能优劣,框架的好坏,我不敢下结论。但这并不影响我对 NHibernate整体的了解。我认为NHibernate是一套实现O/R Mapping的框架之一。 只要它没脱离这个范畴,我认为下面的理解应该是对的。
  
    下面论述一下我心目中的Ado.net与NHibernate的关系,欢迎大家指出缺点,补充我的NHibernate知识。谢谢!

ado.net是.net平台上的托管的数据访问提供程序 ,是.net程序访问数据库的一个基础组件,绝大部分程序需要访问数据库都使用此组件。当然,你也可以调用Com组使用以前版本的Ado.

而 Nhibernate是一个数据映射的工具,它将数据库表中的数据映射成各种业务对像的形式。 其实我们不用Nhibernate一样可以做到映射,我们 将数据库表中的字段组合成一个类就行了。只是Nhibernate可以实现自动化,有一个良好的框架,有良好的对像缓存机制。

ado.net 与NHibernate的关系:

ado.net提供数据访问的底层功能,而NHibernate是在Ado.net之上提供将数据封装成对像的一个框架。 换句话说:  NHibernate同样是使用Ado.net来访问数据库的。 所以,Nhibernate与Ado.net的关系可以认为是: 调用和被调用的关系。
所以,“我使用了Nhibernate,代替了Ado.net”;, 是不准确的, 拿ado.net 与Nhibernate对比也是不恰当的。 两者跟本不是一回事。 就好比有人拿微软的DataAccess Application Block 与Ado.net对比而得出 DataAccess Application Block 比Ado.net更好一样搞笑。 实际上,它只是对于Ado.net的再一次封装。是在Ado.net上面再加一层,使用NHibernate实际上就是通过NHibernate间际使用 Ado.net. 所有与Ado.net打交道的事情全部由NHibernate代劳了。

所以如果按以下方式定义Nhibernate的话,我表示认同:

Nhibernate是采用面向对的方式对Ado.net数据访问进行了进一步的封装,通过隐藏Ado.net调用的细节,隐藏了Sql和数库库表的操 作。实现了数据库表与业务对像的自动映射,并提供了数据对像缓存和各种事件机制。 有效解决了我们人工进行数据库和业务对像映射时的 代码量大的问题。缓存功能缓解了数据库映射所带来的性能问题。 让我们能够以比较小的代价实现更好的面向对像的数据库程序开发。 (转载于博客园另一位高手)

从java中的hibernate看Ado.net 与NHibernate的关系相关推荐

  1. java中的mvc和三层结构究竟是什么关系

    一件事,要知其然往往很简单,要知其所以然通常不是那么容易,就如最近重新巩固spring的过程中,就觉得还有许多问题其实并不是十分明了. 屈指一算,手头上做过的正式项目也有了四五六七个了,不管用的数据库 ...

  2. java中友元类_友元类成员的依赖关系|循环依赖

    定义一个CBottle类,另一个类CCarton的某个成员对CBottle进行操作,因此在CBottle类中赋予CCarton成员的友元权利.我们很容易写出如下代码: //CBottle类的头文件 b ...

  3. java中某对象的引用什么意思_在java中,引用对象变量和对象间有什么关系?()

    案例分析一:假定CPU的主频是500MHz.硬盘采用DMA方式进行数据传送,其数据传输率为4MB/s, 每次DMA传输的数据量为8KB, 要求没有任何数据传输被错过. 如果CPU在DMA初始化设置和启 ...

  4. Java中for循环continue,break,return三者之间的关系

    理论介绍 1.continue 跳出本次循环,进行下一个循环 2.break 跳出for循环结束: 3.return 直接结束循环 实例 实例1: for(int i =0;i<5;i++){S ...

  5. java super父类的父类_合理使用父类的财富——Java中的super

    Java中的继承让类之间有了父子关系.子类可以继承父类开放给自己的变量.方法等等. 在子类可以直接使用父类的这些变量或者方法等等. 就像下面图1的代码这样. 图1 这段代码中在子类对象可以直接使用父类 ...

  6. Java中return的用法

    Java中的return语句总是和方法有密切关系,return语句总是用在方法中,有两个作用,一个是返回方法指定类型的值(这个值总是确定的),一个是结束方法的执行(仅仅一个return语句). 以下是 ...

  7. 一文彻底搞懂Java中的值传递和引用传递!

    关于Java中方法间的参数传递到底是怎样的.为什么很多人说Java只有值传递等问题,一直困惑着很多人,甚至我在面试的时候问过很多有丰富经验的开发者,他们也很难解释的很清楚. 我很久也写过一篇文章,我当 ...

  8. Java三层结构的概念_Java中的mvc和三层结构究竟是什么关系

    原标题:Java中的mvc和三层结构究竟是什么关系 一件事,要知其然往往很简单,要知其所以然通常不是那么容易,就如最近重新巩固spring的过程中,就觉得还有许多问题其实并不是十分明了. 屈指一算,手 ...

  9. java中访问不可视字段_Kotlin与Java的不同之处

    code小生,一个专注 Android 领域的技术平台 公众号回复 Android 加入我的安卓技术群 作者:小村医 链接:https://www.jianshu.com/p/f7deb4fe6427 ...

最新文章

  1. 使用Microsoft Visual Studio International Pack获得中文字符串的所有拼音组合(处理多音字)...
  2. TCP/IP详解--学习笔记(7)-广播和多播,IGMP协议
  3. js解析二维码_最新最全阿里巴巴,今日头条,腾讯Flutter面试真题全解析(狂虐不止)...
  4. 微信小程序 request请求数据 模块输出
  5. 如何QLayout内部的成员部件之间从左到右依次排列
  6. android代码获取应用名称,Android获取应用程序名称(ApplicationName)
  7. android多屏应用程序,微软也尝试“多屏协同” Windows系统可以运行安卓程序
  8. CCommandLineInfo详解-启动不创建新文档【对单文档有问题?】
  9. 3分钟弄明白JAVA三大修饰符
  10. 三大性质总结:原子性,有序性,可见性
  11. html 字体图标 颜色怎么改,关于css:如何设置Font Awesome Icons的图标颜色,大小和阴影的样式...
  12. MATLAB三阶导怎么输入,三阶样条插值(一阶导数边界条件) matlab程序
  13. 掌上书院UMD文件格式分析
  14. Barrett reduction算法
  15. CAD不支持实时调试
  16. 浏览器缓存机制,强缓存,弱缓存
  17. 高性能服务器架构(High-performace Server Architecture)
  18. NVENC/NVDEC 10bits 编程
  19. 海洋cms单本小说网站模板
  20. 用python画多啦爱梦图片_哆啦a梦画画步骤

热门文章

  1. Oral English 1: A topic about public transportaion in Chicago.
  2. Ellipse(椭圆)
  3. 【 MATLAB 】离散傅里叶级数(DFS)及 IDFS 的 MATLAB 实现
  4. 【PB开发】第2天: 应用创建及窗体配置
  5. 机房监控系统解说--发电机篇
  6. Android实战技巧之十一:Android Studio和Gradle
  7. Android中发送和接收短信
  8. 如何配置windows下的snmp服务
  9. 好分数a1a5_好分数怎么查看班级排名 七年级学生成绩查询
  10. DSP学习初阶的一些笔记