SpringData Jpa、Hibernate、Jpa 三者之

2021-05-28  本文已影响0人  催化剂

1.解释hibernate之前先了解下什么是orm,orm是object relation mapping,即对象关系映射,object可以理解成java实体类Entity,relation是关系型数据库中的二维表,mapping是java对象到数据库表记录的映射;

2.hibernate是一种强大的ORM框架,着手解决如何实现映射的方案,是一种处理映射关系方法类框架;

3.jpa,Java Persistence API,即java 持久化api,是一种官方标准(接口),因为官方没有好的解决方案,而hibernate是第三方的,所以厚颜无耻的在有了具体解决方案后提出一种标准,实际是sun的EJB斗不过spring的结果(想听故事自行百度),jpa的具体解决方案不止hibernate一种,还有TopLink、JDO、open等,可以简单理解成jpa是接口,hibernate是实现类;

4.Spring Data JPA是强大的Spring Data系列的一部分,可以轻松实现基于JPA的存储库,此模块处理对基于JPA的数据访问层的增强支持,它使构建使用数据访问技术的Spring驱动应用程序变得更加容易。简单理解就是spring对jpa的更高层次的抽离,也是一种规范,需要具体实现,如hibernate,不过在此基础上又实现了一些功能,比如可以根据dao接口中的方法名智能实现dao的实现,所有你只需要写dao接口,不需要写实现,不过方法名必须符合规则,具体规则自行百度。

JPA规范与ORM框架之间的关系是怎样的呢?

JPA规范本质上就是一种ORM规范,注意不是ORM框架——因为JPA并未提供ORM实现,它只是制订了一些规范,提供了一些编程的API接口,但具体实现则由服务厂商来提供实现,JBoss应用服务器底层就以Hibernate作为JPA的实现。

既然JPA作为一种规范——也就说JPA规范中提供的只是一些接口,显然接口不能直接拿来使用。虽然应用程序可以面向接口编程,但JPA底层一定需要某种JPA实现,否则JPA依然无法使用。

从笔者的视角来看,Sun之所以提出JPA规范,其目的是以官方的身份来统一各种ORM框架的规范,包括著名的Hibernate、TopLink等。不过JPA规范给开发者带来了福音:开发者面向JPA规范的接口,但底层的JPA实现可以任意切换:觉得Hibernate好的,可以选择Hibernate JPA实现;觉得TopLink好的,可以选择TopLink JPA实现……这样开发者可以避免为使用Hibernate学习一套ORM框架,为使用TopLink又要再学习一套ORM框架。

下图是JPA和Hibernate、TopLink等ORM框架之间的关系:

JPA规范与ORM框架之间的关系

JPA和Hibernate的关系就像JDBC和JDBC驱动的关系,JPA是规范,Hibernate除了作为ORM框架之外,它也是一种JPA实现。JPA怎么取代Hibernate呢?JDBC可以驱动JDBC驱动吗?

那么Spring Data JPA与JPA规范的关系是怎样的呢?

实现应用程序的数据访问层已经很麻烦了好一阵子。太多的样板代码必须被写入。Domain classes,并没有被设计成面向一个真正的对象或领域驱动的方式。

使用spring data jpa能够使丰富的Domain classes的持久性开发变得轻松很多,即使样板代码来实现存储库量特别还是相当高的。所以Spring data jpa的目标是简化关于各种持久存储数据访问层而努力。

备注:Domain classes 指的是POJO类,例如数据库中有一张表:Student,那么我们会在程序中定义与之对应的Student.java,而这个Student.java就是属于Domain classes。

Long story short, then, Spring Data JPA provides a definition to implement repositories that is supported under the hood by referencing the JPA specification, using the provider you define.

长话短说,Spring Data JPA 是在JPA规范的基础下提供了Repository层的实现,但是使用那一款ORM需要你自己去决定。

我的理解是:虽然ORM框架都实现了JPA规范,但是在不同ORM框架之间切换是需要编写的代码有一些差异,而通过使用Spring Data Jpa能够方便大家在不同的ORM框架中间进行切换而不要更改代码。并且Spring Data Jpa对Repository层封装的很好,可以省去不少的麻烦。

spring data jpa、jpa以及ORM框架之间的关系

上一篇下一篇

猜你喜欢

热点阅读