Java 奥姆:是还是不是?
我必须用Java开始一个中等规模的项目,但我一般不太喜欢ORM,所以问题是:我是否应该在设计项目时考虑ORM(供以后使用) RDBMS是Oracle 10g,查询将与Oracle语法/功能(即文本、挖掘、连接方式等)紧密耦合Java 奥姆:是还是不是?,java,orm,Java,Orm,我必须用Java开始一个中等规模的项目,但我一般不太喜欢ORM,所以问题是:我是否应该在设计项目时考虑ORM(供以后使用) RDBMS是Oracle 10g,查询将与Oracle语法/功能(即文本、挖掘、连接方式等)紧密耦合 非常感谢。您可能想看看前面这个问题,它讨论了ORMs的好处: 最相关的部分(摘自公认的答案): 如果您有复杂的手动调优SQL, 使用计算机没有多大意义 奥姆 如果您不断地超越ORM并编写自己的SQL,ORM可能最终会成为阻碍。这取决于 而且你不必为每次数据库访问都使用ORM
非常感谢。您可能想看看前面这个问题,它讨论了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,所以我会使用iBatis、JOOQ或MentaBean。顺便说一句,它提供了一种尽可能接近SQL的方法,同时提供了大量关于样板JDBC代码的帮助。ORM: 是的,适用于任何类似公司的软件,其中数据非常复杂…多个级别、表格、层。。。但即使在这里,也建议将NHibernate和EF6以及数据库视图很好地结合起来 不适用于任何特殊应用程序。比如测量,需要保存大量数据,但不需要数据复杂性
使用ORM有多种可能性,这取决于您想要什么 作为一名真正的ORM映射者,我强烈推荐NHibernate和Fluent NH映射。你需要大量的研究来构建一个好的架构,但是没有任何东西可以阻挡你。通过最小的妥协,您可以获得真正的灵活性 EF6x(核心不是可生产的IMHO)被称为ORM,但它生成的更接近DAL。有一些事情你不能有效地使用EF6。尽管如此,这仍然是我最喜欢的读模型工具,而我确实将它与NHibernate结合使用(NH用于DDD/写模型) 现在谈谈性能,它总是有利的,也有不利的。如果您深入了解ORM体系结构(请参阅我的文章:),那么您将直观地找到使其更快的方法。这是我的另一篇文章