Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 奥姆:是还是不是?_Java_Orm - Fatal编程技术网

Java 奥姆:是还是不是?

Java 奥姆:是还是不是?,java,orm,Java,Orm,我必须用Java开始一个中等规模的项目,但我一般不太喜欢ORM,所以问题是:我是否应该在设计项目时考虑ORM(供以后使用) RDBMS是Oracle 10g,查询将与Oracle语法/功能(即文本、挖掘、连接方式等)紧密耦合 非常感谢。您可能想看看前面这个问题,它讨论了ORMs的好处: 最相关的部分(摘自公认的答案): 如果您有复杂的手动调优SQL, 使用计算机没有多大意义 奥姆 如果您不断地超越ORM并编写自己的SQL,ORM可能最终会成为阻碍。这取决于 而且你不必为每次数据库访问都使用ORM

我必须用Java开始一个中等规模的项目,但我一般不太喜欢ORM,所以问题是:我是否应该在设计项目时考虑ORM(供以后使用)

RDBMS是Oracle 10g,查询将与Oracle语法/功能(即文本、挖掘、连接方式等)紧密耦合


非常感谢。

您可能想看看前面这个问题,它讨论了ORMs的好处:

最相关的部分(摘自公认的答案):

如果您有复杂的手动调优SQL, 使用计算机没有多大意义 奥姆

如果您不断地超越ORM并编写自己的SQL,ORM可能最终会成为阻碍。

这取决于


而且你不必为每次数据库访问都使用ORM…

因为我不允许像这样评论你的帖子(没有分数)

这将有助于讨论您为什么不喜欢ORM


依我看,我会去的。如果你因为某种原因发现ORM的查询速度很慢,那么我会自己做。仅仅因为大部分任务都使用ORM,并不意味着所有任务都必须使用ORM。但是,是的,它会是你的首选。

ORM的另一个优点是它会在你的简历上看起来很好。现在广告中的大多数工作(至少是Java开发人员)都需要一些关于ORMs的知识。因此,如果你有机会参与一个项目,我会选择Spring和Hibernate,因为它会真正提升你的简历


我认为与另一个问题的链接很好地涵盖了技术优势,所以我不会对它们做任何说明。

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

就像其他人提到的那样;如果您严重依赖(关系)数据库,则ORM提供了litle,只是添加了不太有用的抽象。 但最重要的是:您是否(希望)将数据作为对象处理?如果是,ORM就是为此而设计的。如果没有,为什么要麻烦呢。 如果需要的话,您可以在以后添加ORM——可能需要比前面多一点的时间,但是做相反的事情(在Hibernate挡住您的路之后删除它…)更糟糕


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

我个人发现它们(嗯,Hibernate)是一个难以置信的时间接收器。我非但没有节省时间,反而花了太多时间试图弄清楚它到底在做什么。正如其他人所提到的,如果您的数据模型增长超过一定的复杂性,那么在您和数据库之间有另一层只会产生更多的摩擦。如果您的数据模型没有那么复杂,那么您实际上并不需要ORM

确实建议进行某种抽象,将SQL排除在Java代码之外,但这可以通过DAO层和属性文件或其他任何方式实现。另外,像IBATIS或SpringJDBC这样的工具也很有用,因为您仍然可以编写自己的查询,并且只需使用框架来帮助处理JDBC和模型对象之间的所有样本代码


附言:有趣的旁注。在我的办公室里,我们实际上有一张加文·金的镶框照片,我们都在肖像中诅咒它。“嘿,现在轮到你处理今天的Hibernate问题了,Gavin来了。”:-)

ORM有意地将工作对象与数据库分离,创建了一个抽象(不可避免地会出现泄漏)。所以你最终只能通过隧道恢复你故意消除的东西


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

或者映射确实可能是特定于数据库的SQL的问题。但是,OR映射的一些概念非常强大,可以使它更容易与数据库交互。许多地图绘制者共有的一些概念是:

  • 为数据库架构生成代码
  • 类型安全(由某些ORM提供)
  • 比JDBC提供的更健壮的变量绑定
  • 按对象组合SQL以避免SQL语法错误
任务的一个好工具可能是,它允许您创建任何想要的SQL(包括嵌套选择、联合、复杂联接、别名、存储过程、UDT等)


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

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

ORM: 是的,适用于任何类似公司的软件,其中数据非常复杂…多个级别、表格、层。。。但即使在这里,也建议将NHibernate和EF6以及数据库视图很好地结合起来

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


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

作为一名真正的ORM映射者,我强烈推荐NHibernateFluent NH映射。你需要大量的研究来构建一个好的架构,但是没有任何东西可以阻挡你。通过最小的妥协,您可以获得真正的灵活性

EF6x(核心不是可生产的IMHO)被称为ORM,但它生成的更接近DAL。有一些事情你不能有效地使用EF6。尽管如此,这仍然是我最喜欢的读模型工具,而我确实将它与NHibernate结合使用(NH用于DDD/写模型)

现在谈谈性能,它总是有利的,也有不利的。如果您深入了解ORM体系结构(请参阅我的文章:),那么您将直观地找到使其更快的方法。这是我的另一篇文章