NHibernate和iBATIS.NET之间有什么区别?

NHibernate和iBATIS.NET之间有什么区别?,nhibernate,orm,ibatis.net,data-mapping,Nhibernate,Orm,Ibatis.net,Data Mapping,我正在寻找一些比较NHibernate和iBATIS.NET的最新信息。我在谷歌搜索时发现了一些信息,但有一部分信息要么适用于这些产品的Java版本,要么已经过时 我感兴趣的一些具体事情: 如果同时控制数据模型和应用程序,哪个更好 iBATIS被反复称为“易学”——这是否会带来长期维护后果(即易于启动、难以维护) 这两者是否都能使切换底层数据库供应商变得容易 您的开发人员需要具备多大的SQL技能 一方拥有另一方缺乏的任何主要特征 这两种产品是否更适合特定类型的应用 对于观察到的优点和缺点的真

我正在寻找一些比较NHibernate和iBATIS.NET的最新信息。我在谷歌搜索时发现了一些信息,但有一部分信息要么适用于这些产品的Java版本,要么已经过时

我感兴趣的一些具体事情:

  • 如果同时控制数据模型和应用程序,哪个更好
  • iBATIS被反复称为“易学”——这是否会带来长期维护后果(即易于启动、难以维护)
  • 这两者是否都能使切换底层数据库供应商变得容易
  • 您的开发人员需要具备多大的SQL技能
  • 一方拥有另一方缺乏的任何主要特征
  • 这两种产品是否更适合特定类型的应用
对于观察到的优点和缺点的真实例子,我们将不胜感激


编辑:谢谢你的信息。我也在做自己的评估。有一件事我仍然很好奇,iBATIS是否能帮助您保存/更新复杂的对象图?NHibernate似乎很不错,因为我可以向它传递一个根对象,它可以计算出需要在数据库中更新的内容的细节。

从某种意义上说,它是在比较苹果和桔子

如果同时控制数据模型和应用程序,哪个更好

它们都能很好地处理规范化数据库,因此,如果可以调整数据库的形状,它们或多或少是相等的。iBatis更擅长映射到遗留数据库,因为它实际上根本不关心数据库结构。它只关心结果集的形状

.iBATIS被反复称为更容易学习-这是否会导致长期维护后果(即易于启动,难以维护)

它要简单得多,但这是因为它的特性集要小得多。我不认为它有任何定时炸弹长期维护问题

这两者是否都能使切换底层数据库供应商变得容易

您的开发人员需要具备多大的SQL技能

两者都需要良好的SQL知识。使用iBatis,您仍然需要编写sql查询/proc。使用NHibernate,您必须知道如何编写NHibernate查询以获得有效的SQL。两者都不是SQL知识的替代品

一方拥有另一方缺乏的任何主要特征


iBatis是一个数据映射程序(iBatis站点上使用的术语)。NHibernate是一个成熟的对象关系映射器。如果您主要希望消除将对象映射到结果集的单调性,那么iBatis是一种很好的方法。然而,它并没有完全解决对象/关系不匹配的问题。NHibernate还有很多特性,比如脏跟踪、基于身份/身份映射的缓存、灵活的查询、动态sql、批处理等。。。NHibernate更具动态性,因为它可以在DB的一次行程中完成许多事情,而iBatis可能需要多次行程

我刚才做了一些研究

我提出的一个具体问题可能会为您提供一些补充信息:

我可以回答你的一些兴趣点:

  • 如果同时控制数据模型和应用程序,哪个更好
我可以用另一种方式回答:如果您无法控制数据模型,因此面临一些遗留数据库,那么iBatis是更好的选择

  • iBATIS被反复称为“易学”——这是否会带来长期维护后果(即易于启动、难以维护)
这取决于你想用它做什么。如果您有领域驱动的开发方法,那么iBatis可能会随着时间的推移而变得痛苦。如果您只是进行简单的数据操作,而没有一个完整的域模型,那么nHibernate在当时可能是一个过度的杀伤力

  • 这两者是否都能使切换底层数据库供应商变得容易
两者都有保护您免受特定数据库供应商攻击的机制,但我承认,他们并没有在这方面做过深入的研究

  • 您的开发人员需要具备多大的SQL技能
当您使用iBatis时,您需要比NHibernate更多的SQL技能。使用iBatis,您总是需要编写一些SQL代码。NHibernate不需要编写SQL语句——它甚至可以为您编写DDL。强大的功能将要求您使用旧的好SQL,这是不可避免的

其他几点:

  • 我个人认为iBatis的重量要轻得多。你可以很快把事情做完。NHibernate更强大,但有更多的功能,您可能会以错误的方式使用这些功能

  • 可以结合使用NHibernate和iBatis!您可以将NHibernate用于您的业务逻辑。出于报告目的,如果您只是从表中读取数据,请回退到iBatis

  • >P>如果应用程序具有较长的生命周期和大量的业务逻辑,请考虑NHiBiNATE。它有很多特性可以帮助您处理业务对象

  • NHibernate周围的社区非常活跃,并提供了有用的工具


我们最近发布了一篇文章,对这两种工具进行了比较,我认为您的许多问题都得到了解决。这篇文章就在这里。

这是一篇很棒的文章。谢谢这个链接不见了?我再也打不开了。