为什么我们需要一个对象关系映射器?

时间:2010-12-20 16:11:04

标签: java hibernate

我买了一本关于Hibernate的书。我想了解一下Hibernate是什么以及什么是对象关系映射。

利用Hibernate在Hibernate上有很好的主题,我认为我现在能够编写简单的映射类。我的问题是,我认为我在Hibernate上遥遥领先,但我真的不知道为什么我们需要它。

这本书清楚地解释了Hibernate,但我认为我迷失了,因为它没有讨论为什么我们需要Hibernate和ORM。

6 个答案:

答案 0 :(得分:2)

我也建议从wikipedia开始。

从那里,按照底部的链接。

提供一个简短的答案:ORM用于从数据存储中抽象,通常是数据库。这可以用于多种目的:

  • 应用程序员可以添加和 保持的功能 没有深入了解的软件 数据库(你可以写你的 Java中的代码,而不是SQL中的代码。
  • 它消除了拥有的陷阱 将您的SQL语句组装为 字符串,因此消除了 巨大的错误来源。
  • 数据库优化是独立的 来自商业逻辑。这确保了 更好的可维护性。该 优化可以通过以下方式完成 ORM(通过配置文件)或 直接在数据库中(通过手动 添加索引表和/或查询 高速缓存)。两者都不会发生在 实际的程序代码。
  • 数据提供者可以更容易 交换,因为ORM通常 提供多种驱动程序 数据库,这样一样 功能逻辑将使用 不同的产品和供应商。

答案 1 :(得分:1)

其核心是Separation of Concerns

数据持久性和逻辑是两个独立的问题。应用程序编码人员不应该关心IT员工本周决定使用的SQL风格,以及如何在关系实体和对象层次结构实体的不同范例之间进行转换。

DBA也不需要关注对象所有权规则以及业务层中其他几乎漏洞的问题。

实际上,在较大的系统中,您很少能完全与供应商无关,并且DAO层不可避免地会收集一些与ORM无关的查询以进行性能调整。像Hibernate这样的工具可以尽最大努力使这些情况尽可能少见和抽象。

答案 2 :(得分:0)

使用类似(N)的ORM Hibernate只是确保您不必担心编写SQL查询,它可以帮助您专注于“域”(业务逻辑)。

但是,为了能够创建高性能应用程序,需要对底层DB(和sql)有一些了解。 :)

答案 3 :(得分:0)

Wikipedia : Object Relational Mapping? :)

更准确地说,ORM允许您使用直接绑定到数据库的对象。

例如,我有一辆Car,它有4个物体门,每个门都有一个颜色,每个颜色都是一个名字。

使用ORM,我从数据库中获取Car对象。然后我去了一个Car.GetDoors(),我得到了一系列我的门,对于每一门,我都可以使用Door.GetColor()。GetColorName()。

这意味着我没有费心去编写SQL查询以从门表获取带有CarID的门,也没有从带有colorID的Color表中获取ColorName。因此,ORM允许我编写更少的代码:)

答案 4 :(得分:0)

您可能正在为一家大公司编写一个基于Web的应用程序,该应用程序可能涉及许多不同类的数十万个对象。您希望在面向对象的代码中编写所有业务逻辑,但这些对象需要持久保存到SQL数据库。使用ORM意味着您不必担心如何与SQL进行转换,而是可以专注于实现实际的应用程序。

答案 5 :(得分:0)