ORM、JPA、Hibernate、MyBatis之间的关系梳理

关于ORM框架

ORM(Object Relational Mapping)对象关系映射(双向),顾名思义可以理解为是在对象层面将对象映射到数据库的一种技术。实体对象和数据库的双向映射 面向对象的概念。

他包括两个方面:对象 --> 关系 和 关系 --> 对象;像Hibernate就是一个完整的ORM框架,他支持用对象模型来操作数据库,完全脱离了sql。而MyBatis是不完整的ORM框架,因为他只实现了关系 --> 对象之间的映射,他想要操作数据库还是得用sql。Data Mapper Framework

JPA是ORM框架标准,主流的ORM框架都实现了这个标准。需要注意的一点是主流持久层框架MyBatis没有实现JPA规范,他和ORM框架的设计思路完全不一样,MyBatis是拥抱sql,而ORM则更靠近面向对象,不建议写sql,实在要写推荐你写hql代替。Mybatis是sql mapping框架而不是ORM框架,当然ORM和Mybatis都是持久层框架。

小记:Hibernate和Spring Data JPA 是完全的ORM框架,因为他们都是纯粹的面向对象的操作,关系和对象的双向映射,不用写sql,移植性更好,但是不够灵活,不能进行sql调优。而MyBatis是不完全的ORM框架,因为他是半自动的(只有关系到对象之间的映射),是不支持纯粹的面向对象操作,需要开发人员编写sql,这样的好处是灵活,可以进行sql调优。

那JPA又是什么呢?

JPA(Java Persistence API)根据名字直译过来就算是Java持久层的API,是ORM的一种规范,并不是ORM框架,这里要与Hibernate等ORM框架进行区分。JPA之所以诞生是为了统一各个ORM框架的使用,使他们共同约定要执行JPA规范。

个人认为应用JPA规范最大的好处就是操作实体类来执行CRUD的操作,即通过对象解耦SQL语句。面向对象的操作。

一般来说JPA会默认使用Hibernate作为他的ORM框架,因为他俩整合的最好(MyBatis没有实现JPA规范)。所以,一般使用Spring Data JPA即会使用hibernate。hibernate是对JDBC的一种轻量级封装,他最大的特点就是全自动,几乎不需要写sql语句,用面向对象的思想去操作数据库,降低了对象和数据库类型(mysql,orcale)的耦合性,使其迁移性更高。
所以目前工作中框架上用的JPA其实就是实现了JPA规范的hibernate框架。自己学习中发现的Spring Data JPA接口也是如此。

Spring Data JPA可以理解为 JPA 规范的再次封装抽象,底层还是使用了 Hibernate 的 JPA 技术实现。所以Spring Data JPA是一个ORM框架。

由此得出结论:没有过时的持久层框架,每个持久层框架各有利弊,根据需要选择一个适合自己架构的框架才会达到事半功倍的效果。

你可能感兴趣的:(日常学习,java,hibernate)