NHibernate和iBATIS.NET有什么区别?

时间:2009-03-29 12:16:45

标签: nhibernate orm ibatis.net data-mapping

我正在寻找一些比较NHibernate和iBATIS.NET的最新信息。我发现了一些搜索谷歌的信息,但其中很多都适用于这些产品的Java版本,或者已经过时了。

我感兴趣的一些特定事项:

  • 如果您同时控制数据模型和应用程序,哪个更好?
  • iBATIS反复被称为更容易学习 - 这是否会产生长期维护后果(即易于启动,难以维护)?
  • 是否可以轻松切换底层数据库供应商?
  • 您的开发人员对SQL的熟练程度如何?
  • 另一个人缺少哪一个主要特征?
  • 这两种产品是否更适合特定类型的应用?

赞赏观察到的好处和缺点的现实世界的例子!

编辑:感谢您提供的信息。我也在做自己的评价。有一点我还在想,iBATIS是否可以帮助您保存/更新复杂的对象图?似乎NHibernate很好,因为我可以传递一个根对象,它会计算出需要在数据库中更新的详细信息。

3 个答案:

答案 0 :(得分:5)

我不久前做了一些研究。

我的一个具体问题可能会给你一些额外的信息: Would you use NHibernate for a project with a legacy database, which is partly out of your control?

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

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

我可以反过来回答:如果您无法控制数据模型并因此面对某些遗留数据库,那么iBatis是更好的选择。

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

这取决于你想用它做什么。如果您有域驱动的开发方法,那么iBatis可能会随着时间的推移而变得痛苦。如果您只是进行简单的数据操作并且没有完整的域模型,那么nHibernate可能会成为一种过度杀伤力。

  • 是否可以轻松切换底层数据库供应商?

两者都有保护您脱离特定数据库供应商的机制,但我承认没有在这方面做过深入的研究。

  • 您的开发人员对SQL的熟练程度如何?

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

其他一些观点:

  • 我个人觉得iBatis更轻盈。你可以很快完成任务。 NHibernate功能更强大,但功能更多,你可以用错误的方式使用它。

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

  • 如果您的应用程序具有更长的生命周期和许多业务逻辑,请考虑NHibernate。它有很多功能可以帮助您处理业务对象。

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

答案 1 :(得分:3)

从某种意义上说,它将苹果与橙子进行比较。

  

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

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

  

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

它更简单,但这是因为它具有更小的功能集。我不认为它有任何滴答作响的定时炸弹长期维护问题。

  

是否可以轻松切换底层数据库供应商?

  

您的开发人员需要熟练使用SQL吗?

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

  

对方缺少哪一个主要特征?

iBatis是一个数据映射器(iBatis站点上使用的术语)。 NHibernate是一个完整的对象关系映射器。如果您主要想要将单个对象映射到结果集的单调内容,那么iBatis是一个很好的方法。但是,它并没有一直试图解决对象/关系不匹配问题。 NHibernate还有许多其他功能,例如脏跟踪,基于身份/身份映射的缓存,灵活的查询,动态sql,批处理等...... NHibernate更加动态,因为它可以在一次访问数据库中执行很多操作iBatis几次旅行。

答案 2 :(得分:3)

我们最近发布了一篇比较这两个工具的文章,我认为您的许多问题都得到了解决。这篇文章在our wiki site