NHibernate 和 iBATIS.NET 有什么区别?
-
22-08-2019 - |
题
我正在寻找一些比较 NHibernate 和 iBATIS.NET 的最新信息。我在 Google 上搜索到了一些信息,但其中很大一部分要么适用于这些产品的 Java 版本,要么已经过时了。
我感兴趣的一些具体事情:
- 如果同时控制数据模型和应用程序,哪个更好?
- iBATIS 被反复称为更容易学习 - 这是否会产生长期维护后果(即,启动容易,维护困难)?
- 两者都可以轻松切换底层数据库供应商吗?
- 您的开发人员需要掌握多少 SQL 技能?
- 有什么主要特征是一个人拥有而另一个人缺乏的吗?
- 任一产品是否更适合特定类型的应用?
观察到的优点和缺点的真实例子值得赞赏!
编辑:感谢您的信息。我也在做我自己的评价。我仍然想知道一件事,iBATIS 是否可以帮助您保存/更新复杂的对象图?NHibernate 似乎很好,因为我可以向它传递一个根对象,它会计算出数据库中需要更新的内容(如果有的话)的详细信息。
解决方案
我不久前做了一些研究。
我提出的一个具体问题可能会给您一些额外的信息:您是否会将 NHibernate 用于具有遗留数据库的项目,而该数据库部分超出了您的控制范围?
您感兴趣的一些问题我可以回答:
- 如果同时控制数据模型和应用程序,哪个更好?
我可以反过来回答:如果您无法控制数据模型并因此面对一些遗留数据库,iBatis 是更好的选择。
- iBATIS 被反复称为更容易学习 - 这是否会产生长期维护后果(即,启动容易,维护困难)?
这取决于您想用它做什么。如果您采用领域驱动的开发方法,那么随着时间的推移,iBatis 可能会变得痛苦。如果您只是进行简单的数据操作并且没有完整的域模型,那么当时 nHibernate 可能就有点大材小用了。
- 两者都可以轻松切换底层数据库供应商吗?
两者都有机制来保护您免受特定数据库供应商的影响,但我承认还没有在这个方向上进行深入的研究。
- 您的开发人员需要掌握多少 SQL 技能?
当你使用 iBatis 时,你需要比 NHibernate 更多的 SQL 技能。使用 iBatis,您总是需要编写一些 SQL 代码。NHibernate 不需要您编写 SQL 语句——它甚至可以为您执行 DDL。强大的功能将要求您使用旧的好的 SQL,这是不可避免的。
其他一些要点:
我个人认为 iBatis 更轻量。你可以很快地完成事情。NHibernate 更强大,但有更多的功能,您可能会以错误的方式使用它们。
可以结合使用 NHibernate 和 iBatis!您可以将 NHibernate 用于您的业务逻辑。出于报告目的,您只需从表中读取数据,则回退到 iBatis。
如果你的应用程序有较长的生命周期和大量的业务逻辑,请考虑NHibernate。它有很多功能可以帮助您处理业务对象。
NHibernate 周围的社区非常活跃,并提供了有用的工具。
其他提示
从某种意义上说,这是在将苹果与橙子进行比较。
如果同时控制数据模型和应用程序,哪个更好?
它们都可以很好地处理标准化数据库,因此如果您可以塑造数据库,它们或多或少是相等的。iBatis 更擅长映射到遗留数据库,因为它实际上根本不关心数据库结构。它只关心结果集的形状。
.iBATIS 被反复称为更容易学习 - 这是否会产生长期维护后果(即,更容易学习)启动容易,维护困难)?
它要简单得多,但那是因为它的功能集要小得多。我不认为它有任何定时炸弹的长期维护问题。
两者都可以轻松切换底层数据库供应商吗?
是的
您的开发人员需要掌握多少 SQL 技能?
两者都需要对 SQL 有很好的了解。使用 iBatis,您仍然需要编写 sql 查询/过程。使用 NHibernate,您必须知道如何编写 NHibernate 查询以获得有效的 SQL。两者都不能替代 SQL 知识。
有什么主要特征是一个人拥有而另一个人缺乏的吗?
iBatis 是一个数据映射器(iBatis 站点上使用的术语)。NHibernate 是一个成熟的对象关系映射器。如果您主要想要摆脱将对象映射到结果集的单调乏味,那么 iBatis 是一个很好的选择。然而,它并没有完全解决对象/关系不匹配的问题。NHibernate 还有更多功能,例如脏跟踪、基于身份/身份映射的缓存、灵活查询、动态 sql、批处理等......NHibernate 更具动态性,因为它可以在一次数据库访问中完成许多事情,而这些事情可能需要 iBatis 多次访问。
我们最近发布了一篇文章比较这两种工具,我认为您的许多问题都得到了解决。这篇文章在这里 我们的维基网站.