ORM和对象映射之间有何区别?

时间:2018-09-22 18:14:17

标签: java hibernate orm mybatis

在Spring Boot教程站点上,我阅读了以下内容:

  

Spring Framework的一大优点是它不会尝试解决已经解决的问题。它所做的一切就是提供与框架的良好集成,从而提供出色的解决方案。

     
      
  • 为ORM休眠
  •   
  • 用于对象映射的iBatis
  •   

这就是Hibernate解释其目的的方式:

  

Hibernate ORM使开发人员可以更轻松地编写其数据超出应用程序进程寿命的应用程序。作为对象/关系映射(ORM)框架,Hibernate关注数据持久性,因为它适用于关系数据库(通过JDBC)。

除了iBatis将名称更改为MyBatis之外,MyBatis提供的解决方案似乎与ORM方法不同。 MyBatis的创建者在其introduction page上写道:

  

MyBatis是一流的持久性框架,支持自定义SQL,存储过程和高级映射。 MyBatis消除了几乎所有的JDBC代码以及参数的手动设置和结果检索。 MyBatis可以使用简单的XML或注释进行配置,并将图元,Map接口和Java POJO(普通的旧Java对象)映射到数据库记录。

因此,我的猜测是对象映射必须更接近数据库,SQL,存储过程等。我不知道它是否可以应用于NoSQL数据库。而ORM仅涉及关系数据库。

ORM 对象映射是否真的不同?或者它们是同义词?有什么区别?

2 个答案:

答案 0 :(得分:1)

  

所以我的猜测是对象映射必须更接近数据库,   SQL,存储过程之类。我不知道是否可以应用   到NoSQL数据库。而ORM仅涉及关系数据库。

是的,当谈到mybatis和冬眠之间的区别时。 Here是一个很好的解释,可以很好地说明您的情况。

  

ORM与对象映射真的不同吗?还是它们的同义词?有什么区别?

关于术语“对象映射”:它也可以表示某些其他事物,这些事物不一定与数据库有任何关系。例如,杰克逊可能使用对象映射器将Json数据映射到某些Java POJO。

当我将ORM与@EntityJPA实现一起使用时,我倾向于谈论(和听到)ORM,所以它具有相当高的抽象性。

另一方面,至少在Java中,对象映射可以表示将任意数据映射到对象,将对象映射到另一个对象或将对象映射到任意数据的任何事物(如db表中的一行)。

但这并不是说我不应该使用术语对象映射,但是this也可能很有趣。

答案 1 :(得分:1)

Hibernate(或更广泛地说,是任何JPA实现)和MyBatis之间的主要区别是重点。

JPA在您所定义的主要事物是实体及其所有字段以及与其他实体的关系的意义上关注实体。然后,您可以使用一些高级API进行查询,并且框架会为您生成SQL查询。请注意,您使用的查询是根据实体及其字段(而不是表和表列)定义的。

在mybatis中,主要是SQL查询。您定义查询以及将查询结果映射到对象的方式。您创建的查询是纯SQL,它是根据数据库表和表列定义的。您可以完全控制此过程,没有高级API可以为您生成查询(可用的Java API与JPA查询API不同,因为它与查询更像是与字符串模板一起使用,并且可以直接与SQL一起使用,其中JPA专注于对象及其关系。

JPA允许使用本机查询,因此JPA可以像mybatis一样用于纯实体之外,而mybatis不允许根据实体进行查询。

关于ORMObject Mapping的命名,实际上是定义的问题。如果查看wikipedia中ORM的定义和描述,您会发现mybatis是一个ORM。 Object Mapping并不是一个广泛的术语,很难说出本教程的作者真正的意思。