我正在寻找一些比较NHibernate和iBATIS.NET的最新信息。我发现了一些搜索谷歌的信息,但其中很多都适用于这些产品的Java版本,或者已经过时了。
我感兴趣的一些特定事项:
赞赏观察到的好处和缺点的现实世界的例子!
编辑:感谢您提供的信息。我也在做自己的评价。有一点我还在想,iBATIS是否可以帮助您保存/更新复杂的对象图?似乎NHibernate很好,因为我可以传递一个根对象,它会计算出需要在数据库中更新的详细信息。答案 0 :(得分:5)
我不久前做了一些研究。
我的一个具体问题可能会给你一些额外的信息: Would you use NHibernate for a project with a legacy database, which is partly out of your control?
我可以回答您的一些兴趣点:
我可以反过来回答:如果您无法控制数据模型并因此面对某些遗留数据库,那么iBatis是更好的选择。
这取决于你想用它做什么。如果您有域驱动的开发方法,那么iBatis可能会随着时间的推移而变得痛苦。如果您只是进行简单的数据操作并且没有完整的域模型,那么nHibernate可能会成为一种过度杀伤力。
两者都有保护您脱离特定数据库供应商的机制,但我承认没有在这方面做过深入的研究。
当您使用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。