【问题标题】:What is the difference between NHibernate and iBATIS.NET?NHibernate 和 iBATIS.NET 有什么区别?
【发布时间】:2010-10-16 05:23:43
【问题描述】:

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

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

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

我们赞赏现实世界中观察到的优点和缺点的例子!

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

【问题讨论】:

    标签: nhibernate orm ibatis.net data-mapping


    【解决方案1】:

    不久前我做了一些研究。

    我提出的一个具体问题可能会给您一些额外的信息: 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 的社区非常活跃,并且提供了有用的工具。

    【讨论】:

      【解决方案2】:

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

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

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

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

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

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

      是的

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

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

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

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

        猜你喜欢
        • 2021-09-11
        • 1970-01-01
        • 2011-02-07
        • 2010-12-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多