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

Java 为什么我们需要对象关系映射器?,java,hibernate,Java,Hibernate,我买了一本关于冬眠的书。我想学习什么是Hibernate,什么是对象关系映射 利用Hibernate有关于Hibernate的好主题,我确实认为我现在能够编写简单的映射类了。我的问题是,我认为我在冬眠方面遥遥领先,但我真的不知道为什么我们需要一个 这本书清楚地解释了Hibernate,但我认为我不知所措,因为它没有讨论为什么我们需要Hibernate和ORM。使用类似于(N)Hibernate的ORM可以确保您不必担心编写SQL查询,它可以帮助您专注于“域”(业务逻辑) 但是,为了能够创建性能良

我买了一本关于冬眠的书。我想学习什么是Hibernate,什么是对象关系映射

利用Hibernate有关于Hibernate的好主题,我确实认为我现在能够编写简单的映射类了。我的问题是,我认为我在冬眠方面遥遥领先,但我真的不知道为什么我们需要一个

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

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

但是,为了能够创建性能良好的应用程序,需要对底层数据库(和sql)有一些了解。:)

?:)

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

例如,我有一辆车,它有4个对象门,每个门都有一种颜色,每个颜色都有一个名称

使用ORM,我从数据库中获取汽车对象。然后我买了一辆车。GetDoors(),我得到了我的门的集合,对于每一扇门,我都可以使用一扇门。GetColor()。GetColorName()


这意味着我不必费心编写SQL查询来从Door表中获取Doors(带有CarID),也不必从COLORDID的ColorName表中获取ColorName。因此,ORM允许我编写更少的代码:)

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

我也建议从开始

从那里,跟随底部的链接

简单回答:ORM用于从数据存储(通常是数据库)中提取数据。这有多种用途,其中包括:

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

      数据持久性和逻辑是两个独立的关注点。应用程序编码人员不必关心IT人员本周决定使用什么样的SQL,以及如何在关系实体和对象层次实体的不同范例之间进行转换

      DBA也不需要关心对象所有权规则和来自业务层的其他几乎泄漏的问题


      实际上,在更大的系统中,您很少完全不知道供应商,DAO层不可避免地会选择一些与ORM无关的查询来进行性能调整。像Hibernate这样的工具尽其所能使这些情况尽可能少和抽象。

      检查这个

      除了wikipedia链接之外,我还编辑了我的帖子,给出了一个简单的解释:)那么这是否意味着,我仍然需要提前执行ERD图表设计/规范化/索引,这样我就可以导出我的基表,然后使用hibernate来持久化数据?我的逻辑正确吗?谢谢,不完全是。您必须告诉Hibernate如何存储数据。这可以通过向Java对象添加注释或通过部署描述符来实现。例如,您必须声明一对多或多对多关系。从那时起,您可以让ORM处理所有事情:创建表、存储和检索数据等等。但是,您可以(而且可能应该)从SQL优化数据库,即创建索引表或分配数据类型,然后让ORM处理其余的事情。不过,您无法决定如何映射数据。