5

我正在寻找一些比较 NHibernate 和 iBATIS.NET 的最新信息。我在 Google 上搜索到了一些信息,但其中大部分信息要么适用于这些产品的 Java 版本,要么已经过时。

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

  • 如果您同时控制数据模型和应用程序,哪个更好?
  • iBATIS 被反复称为更易于学习——这是否具有长期维护的后果(即易于启动,难以维护)?
  • 两者都可以轻松切换底层数据库供应商吗?
  • 您的开发人员需要具备多高的 SQL 技能?
  • 一个人拥有另一个人缺乏的任何主要功能吗?
  • 这两种产品是否更适合特定类型的应用?

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

编辑:感谢您的信息。我也在做自己的评价。我仍然想知道的一件事是,iBATIS 是否可以帮助您保存/更新复杂的对象图?NHibernate 似乎很不错,因为我可以将根对象传递给它,它会计算出数据库中需要更新的内容(如果有的话)的详细信息。

4

3 回答 3

5

前段时间我做了一些研究。

我提出的一个具体问题可能会为您提供一些额外的信息: 您是否会将NHibernate 用于具有部分无法控制的遗留数据库的项目?

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

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

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

  • iBATIS 被反复称为更易于学习——这是否具有长期维护的后果(即易于启动,难以维护)?

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

  • 两者都可以轻松切换底层数据库供应商吗?

两者都有保护您免受特定数据库供应商影响的机制,但我承认尚未在这方面进行深入研究。

  • 您的开发人员需要具备多高的 SQL 技能?

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

其他几点:

  • 我个人发现 iBatis 更轻量级。您可以非常快速地完成工作。NHibernate 更强大,但具有更多功能,您可能会以错误的方式使用这些功能。

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

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

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

于 2009-03-29T16:08:47.110 回答
3

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

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

它们都可以很好地与规范化数据库一起使用,因此如果您可以塑造数据库,它们或多或少是相等的。iBatis 更擅长映射到遗留数据库,因为它实际上根本不关心数据库结构。它只关心结果集的形状。

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

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

两者都可以轻松切换底层数据库供应商吗?

是的

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

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

一个人拥有另一个人缺乏的任何主要功能吗?

iBatis 是一个数据映射器(iBatis 网站上使用的术语)。NHibernate 是一个成熟的对象关系映射器。如果您主要想要一些东西来消除将对象映射到结果集的单调性,那么 iBatis 是一个很好的方法。但是,它并没有完全解决对象/关系不匹配的问题。NHibernate 具有更多功能,例如脏跟踪、基于身份/身份映射的缓存、灵活查询、动态 sql、批处理等...... NHibernate 更具动态性,因为它可以在一次访问数据库中做很多事情iBatis 几趟。

于 2009-03-29T15:28:45.553 回答
3

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

于 2009-05-08T18:47:50.740 回答