NHibernate与IbatisNet的简单比较

NHibernate是当前最流行的Java O/R mapping框架Hibernate的移植版本,当前版本是1.0 rc-1。它出身于sf.net..IbatisNet是另外一种优秀的Java O/R mapping框架,当前版本是1.3。目前属于apache的一个子项目了。
相对NHibernate“O/R”而言,IbatisNet是一种“Sql Mapping”的ORM实现。
NHibernate对数据库结构提供了较为完整的封装,NHibernate的O/R Mapping实现了PO 和数据库表之间的映射,以及SQL 的自动生成和执行。程序员往往只需定义好了PO 到数据库表的映射关系,即可通过NHibernate提供的方法完成持久层操作。程序员甚至不需要对SQL 的熟练掌握, NHibernate 会根据制定的存储逻辑,自动生成对应的SQL 并调用ADO.NET接口加以执行。 
而IbatisNet的着力点,则在于PO 与SQL之间的映射关系。也就是说,IbatisNet并不会为程序员在运行期自动生成SQL 执行。具体的SQL 需要程序员编写,然后通过映射配置文件,将SQL所需的参数,以及返回的结果字段映射到指定PO。
使用IbatisNet提供的ORM机制,对业务逻辑实现人员而言,面对的是纯粹的DotNet对象,这一层与通过NHibernate实现ORM 而言基本一致,而对于具体的数据操作,NHibernate会自动生成SQL 语句,而IbatisNet则要求开发者编写具体的SQL 语句。相对NHibernate而言,IbatisNet 以SQL开发的工作量和数据库移植性上的让步,为系统设计提供了更大的自由空间。  二者的对比:
1. IbatisNet非常简单易学,NHibernate相对较复杂,门槛较高。
2.  二者都是比较优秀的开源产品
3.  当系统属于二次开发,无法对数据库结构做到控制和修改,那IbatisNet的灵活性将比NHibernate更适合
4.  系统数据处理量巨大,性能要求极为苛刻,这往往意味着我们必须通过经过高度优化的SQL语句(或存储过程)才能达到系统性能设计指标。在这种情况下IbatisNet会有更好的可控性和表现。
5.  IbatisNet需要手写sql语句,也可以生成一部分,NHibernate则基本上可以自动生成,偶尔会写一些Hql。同样的需求,IbatisNet的工作量比NHibernate要大很多。类似的,如果涉及到数据库字段的修改,NHibernate修改的地方很少,而IbatisNet要把那些sql mapping的地方一一修改。
6.  以数据库字段一一对应映射得到的PO和NHibernte这种对象化映射得到的PO是截然不同的,本质区别在于这种PO是扁平化的,不像NHibernate映射的PO是可以表达立体的对象继承,聚合等等关系的,这将会直接影响到你的整个软件系统的设计思路。
7.  最关键的一句话是IbatisNet的作者说的:
If you are starting a new project and you‘re in full control of your object model and database design, NHibernate is a good choice of O/R tool.
If you are accessing any 3rd party databases (e.g. vendor supplied), or you‘re working with a legacy database, or even just a really poorly designed database, then an O/R mapper might not be capable of handling the situation. That‘s were an SQL Mapper comes in handy

时间: 2024-11-02 23:14:06

NHibernate与IbatisNet的简单比较的相关文章

NHibernate VS IbatisNet

  NHibernate 是当前最流行的 Java O/R mapping 框架Hibernate 的移植版本,当前版本是 1.0 .2 .它出身于sf.net..IbatisNet 是另外一种优秀的 Java O/R mapping框架,当前版本是 1.2 .目前属于 apache 的一个子项目了. 相对 NHibernate " O/R "而言, IbatisNet 是一种" Sql Mapping "的 ORM实现.NHibernate 对数据库结构提供了较为

NHibernate变的简单

前言 这篇文章出自于我尝试学习使用Nhiberbnate的挫败感.我发现好像Nhibernate全部的介绍材料不是很模糊就是太详细.我所需要的就是一个简单直接的教程,能让我尽快对NHibernate熟悉起来.我从来没有找到.幸运的是,这篇文章将会满足别人的这些需求. 这篇文章有些长,但是我鼓励你以你的方式来阅读.NHibernate是一个复杂的程序,是一个绵延曲折的学习过程.这篇文章将为你踏平曲折,从几天或是几周缩短到几个小时. 问题 NHibernate目的是解决一个众所周知的问题,对象持久代

工欲善其事,必先利其器——NHibernate

工欲善其事,必先利其器——NHibernate Orchard中用到了许多开源的技术,NHibernate也是其中之一. 下面就来谈一下NHibernate的使用. 熟悉java的人应该清楚,NHibernate来源于Hibernate. 以下为网上转载: 前言 这篇文章出自于我尝试学习使用Nhiberbnate的挫败感.我发现好像Nhibernate全部的介绍材料不是很模糊就是太详细.我所需要的就是一个简单直接的教程,能让我尽快对NHibernate熟悉起来.我从来没有找到.幸运的是,这篇文章

.Net——Nhibernate实现CRUD

最近用到SSH(spring+struct+hibernate),从java里面的hibernate,不自觉联系到.net里面的Nhibernate. 下面来简单聊下Nhibernate. 一,引入Dll 主要有三个: 基本的就这三个,其他的,比如Castle.Core.dll,Castle.DynamicProxy2.dll,Iesi.Collections.dll,log4net.dll 就用到了再引入吧. 二,编写Nhibernate配置文件 <?xml version="1.0&q

DotNet软件开发框架

这是我4月份发在donews博客上的文章,现在都转到博客园来,风满袖希望进一步阐述你的架构,我就将这篇文章转移到博客园.原文:http://blog.donews.com/shanyou/archive/2005/04/23/347792.aspx     以我个人的能力,没有足够的时间和资源自行开发一套完整的平台.在已有的众多开源项目中选择若干优秀的项目进行整合."站在巨人肩膀上"是牛顿有一句名言.,同样适合我们的IT行业. 我对平台的技术架构的构想,是采用开源的ORM框架做数据持久

我大中华微软MVP中国区人才库(转)

出处:http://www.genshuixue.com/i-cxy/p/15349735 刘海峰:国内知名微软开源技术网站51Aspx 创始人,十年以上的asp.net从业经验,微软MSDN特约讲师.Teched讲师.ImagineCup大赛评委.人大出版社研修班特约讲师,曾多次受邀访问美国西雅图的微软总部,2009年与业内知名MVP组建易纵互联(北京)科技有限公司并任运营总监.现专注于微软Azure技术领域,在Azure平台进行功能实践和传统Web平台迁移方面有诸多实战经验.陈锐:2002-

NHibernate使用简单示例

NHibernate使用小示例 1.新建Model类库项目. 使用代码生成器生成Model类. 此处以简单的UserInfo表作为示例. 注意字段前必须以 virtual 修饰. namespace Model { public partial class UserInfo { public virtual System.Int32 Id { get; set; } public virtual System.String Name { get; set; } } } 2.编写映射实体类与数据库

NHibernate 映射基础(第三篇) 简单映射、联合主键

NHibernate 映射基础(第三篇) 简单映射.联合主键 NHibernate完全靠配置文件获取其所需的一切信息,其中映射文件,是其获取数据库与C#程序关系的所有信息来源. 一.简单映射 下面先来一个简单的例子,然后随着不断地对这个例子修修改改,从而真正了解映射文件.具体的资料可以查看http://www.cnblogs.com/kissdodog/archive/2013/02/21/2919886.html 先来看一张表: 映射文件Product.hbm.xml: <?xml versi

简单的NHibernate学习笔记

NHibernate是.NET平台下的ORM框架,与ADO.NET一样实现项目中数据库与项目系统的交互. 1.首先要用NHibernate框架就要有第三方的dll库来作为支持,附上百度云下载地址:(链接:http://pan.baidu.com/s/1dD2KRvz 密码:50fb) 2.新建一个类库项目 引入NHibernate库中的dll文件: 新建一个试题类People.cs: 注意这里每个属性要加virtual关键字 然后配置一个实体类的映射文件 文件名取名为people.hbm.xml