代码之家  ›  专栏  ›  技术社区  ›  ATorras

奥姆:是还是不是?[关闭]

  •  7
  • ATorras  · 技术社区  · 16 年前

    我必须开始在Java中的中型项目,但我不是一般的ORMS的大粉丝,所以问题是:我是否应该设计一个具有ORM(以后使用)的项目?

    RDBMS是Oracle 10g,查询将 非常 与Oracle语法/函数(即文本、挖掘、连接方式等)耦合。

    谢谢。

    11 回复  |  直到 6 年前
        1
  •  10
  •   Community CDub    8 年前

    您可能想看看前面讨论ORM好处的问题: What are the advantages of using an ORM?

    最相关的部分(取自接受的答案):

    如果您有复杂的、手动调优的SQL, 使用 奥姆

    如果您经常接触ORM并编写自己的SQL,那么ORM最终可能会妨碍您的工作。

        2
  •  5
  •   Carl Bergquist    16 年前

    因为我不允许评论你的帖子,所以我这样评论(缺乏观点)。

    有助于讨论你为什么不喜欢ORM。

    我想我会的。如果您出于某种原因发现ORM的查询速度很慢,那么我会自己进行查询。仅仅因为你使用了ORM,你的大部分任务并不意味着你必须为所有人使用它。但是的,这是最好的选择。

        3
  •  5
  •   George Armhold    16 年前

    我个人认为他们(嗯,冬眠)是一个令人难以置信的时间下沉。我不但没有节省时间,还花了太多时间试图弄清楚它到底在做什么。正如其他人所提到的,如果您的数据模型超出了一定的复杂性,那么在您和数据库之间有另一个层只会产生更多的摩擦。如果您的数据模型不那么复杂,那么无论如何您也不需要ORM。

    建议使用某种抽象来防止SQL退出Java代码,但可以简单地用DAO层和属性文件或其他方法来完成。此外,像ibatis或spring jdbc这样的工具也很有用,因为您仍然可以编写自己的查询,并且只需使用框架来帮助处理jdbc和模型对象之间的数据洗牌的所有样板代码。

    附言:有趣的旁注。在我的办公室里,我们实际上有一张加文·金的镶框照片,我们都是假扮成诅咒的。”嘿,这是 你的 转向处理今天的休眠问题,这里是gavin。“:-)

        4
  •  3
  •   willcodejavaforfood    16 年前

    ORM的另一个优点是它在你的简历上看起来很好。当今大多数广告(至少是Java DEVS)需要对ORMS的一些知识。所以如果你有机会做一个项目,我会选择春天和冬眠,因为它会真正提高你的简历。

    我认为到另一个问题的链接相当好地涵盖了技术优势,所以我不会说任何关于它们的内容。

        5
  •  3
  •   TraderJoeChicago    13 年前

    我个人更喜欢尽可能接近SQL,所以我会使用iBatis、Jooq或MentaBean。 MentaBean 顺便说一句,它提供了一种尽可能接近SQL的方法,同时也为样板JDBC代码提供了很多帮助。

        6
  •  2
  •   dkretz    16 年前

    ORM有意将您的工作对象与数据库分离,从而创建一个抽象(不可避免地会出现泄漏)。所以你只需要挖回隧道来恢复你故意消除的东西。

    如果许多应用程序是在数据库中有意实现的,那么ORM只会向信号添加噪声,并衰减信号。

        7
  •  1
  •   pgras    16 年前

    这取决于…

    而且您不必为每个数据库访问使用ORM…

        8
  •  1
  •   Paul Sonier    16 年前

    对。ORM可以减轻应用程序开发人员的负担;至少,在设计时考虑到它们不应该给设计增加太多负担,如果您决定使用ORM的话,在将来会有很大的帮助。

        9
  •  1
  •   StaxMan    16 年前

    像其他人提到的那样;如果您严重依赖于(关系)数据库,那么ORM会提供Litle,只是添加了一些不太有用的抽象。 但最重要的是:您(想)是否将数据作为对象来处理?如果是,ORM就是为此设计的。如果没有,何必麻烦。 如果需要的话,您可以在以后添加ORM——可能比预先添加要花费更多的时间,但是反向添加(在休眠妨碍您的方式之后清除它……)会更糟。

    但是,ORM之间也存在差异;例如,iBATIS可能比Hibernate更适合(对于这个特定主题还有其他问题)。

        10
  •  1
  •   baHI    8 年前

    ORM: 是的,对于任何企业级的软件来说,数据都是复杂的……多个级别、表格、层……但即使在这里,也建议将nhibernate和ef6以及数据库视图进行良好的混合。

    不适用于任何特殊应用程序。比如测量和需要保存大量数据的地方,但是没有数据复杂性


    使用ORM有多种可能性,所有这些都取决于您想要什么。

    作为一个真正的ORM映射器,我强烈建议 NHiBiNATE 流利NH 映射。你需要大量的研究来构建一个好的体系结构,但是没有什么能阻挡你。以最小的妥协,你得到真正的灵活性。

    EF6X (核心不是生产就绪的IMHO)被称为ORM,但它生成的更接近DAL。有件事是你不能有效地利用EF6。尽管如此,这是我最喜欢的一个阅读模型的工具,但我确实将它与nhibernate结合起来(nh用于ddd/write模型)。

    现在到 性能 -它总是利弊并存。如果你深入了解ORM 建筑学 (见我的文章: avoid ORM bad habits )然后你会直观地找到让它更快的方法。这是我的另一篇关于如何制作EF6x 5x的文章 更快 (至少对于读取情况): EF6.x 5x faster

        11
  •  1
  •   Lukas Eder    6 年前

    或者,对于特定于数据库的SQL,映射确实是一个问题。但是,或映射的一些概念非常强大,可以更容易地与数据库交互。许多或映射器所共有的一些概念是:

    • 为数据库架构生成代码。
    • 类型安全(通过某些窗体)
    • 比JDBC提供的更强大的变量绑定
    • 按对象进行SQL组合以避免SQL语法错误

    对于你的任务来说,一个好的工具可能是 https://www.jooq.org ,允许您创建所需的任何SQL(包括嵌套选择、联合、复杂联接、别名、存储过程、UDT等)。

    免责声明:我为供应商工作