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框架之间的关系

SpringData Jpa、Hibernate、Jpa 三者之间的关系相关推荐

  1. PHP-FPM,Nginx,FastCGI 三者之间的关系

    2019独角兽企业重金招聘Python工程师标准>>> 本文介绍 PHP-FPM,Nginx,FastCGI 三者之间的关系,以及 Nginx 反向代理和负载均衡的配置. PHP-F ...

  2. python和pycharm之间的关系_浅析python,PyCharm,Anaconda三者之间的关系

    一.它们是什么? 1.python Python是一种跨平台的计算机程序设计语言,简单来说,python就是类似于C,Java,C++等,一种编程语言. 2.Anaconda Anaconda指的是一 ...

  3. anaconda中的python如何进行关联分析_浅析python,PyCharm,Anaconda三者之间的关系

    一.它们是什么? Python是一种跨平台的计算机程序设计语言,简单来说,python就是类似于C,Java,C++等,一种编程语言. 2.Anaconda Anaconda指的是一个开源的Pytho ...

  4. 浅谈javascript中原型(prototype)、构造函数、对象实例及三者之间的关系

    转自:http://www.cnblogs.com/zhangwei412827/archive/2012/12/14/2816263.html 浅谈javascript中原型(prototype). ...

  5. 构造函数,对象原型,实例对象三者之间的关系

    撸了今年阿里.头条和美团的面试,我有一个重要发现.......>>> 1.构造函数,原型对象,实例对象三者之间的关系 每创建一个函数,该函数都会自动带有一个prototype属性.该 ...

  6. 一次性掌握JDK、JRE、JVM的概念以及三者之间的关系【2021整理】

    一.JDK.JRE.JVM概念解析 JDK(Java Development Kit):Java开发工具包,开发人员用来构建Java应用程序的软件包. JRE(Java Runtime Environ ...

  7. Firewalld,iptables概述(netfilter和Firewalld,iptables三者之间的关系,四表五链,Firewalld防火墙的配置方发,SNAT,DNAT了解)

    文章目录 Firewalld,iptables概述 Firewalld了解 iptables了解 Firewalld和iptables的关系 netfilter Firewalld.iptables ...

  8. java map与set的区别_java 集合(list,set,map)三者之间的关系和区别

    原 java 集合(list,set,map)三者之间的关系和区别 一:先上一张关系图,让大家看的更明白. 备注:其中红色部分为实现,其他地方均为接口. 二:各自的特点. List 有序,可重复Arr ...

  9. 美股,港股和A股三者之间的关系和差别

    美股,港股和A股三者之间的关系: 美股,港股和A股三个股票市场是整个股市的重要组成部分,在整个股市中发挥着巨大作用. 美股,港股和A股三者之间的区别: (1)交易时间不同 美股:从每年4月到11月初采 ...

最新文章

  1. HDU——2874 Connections between cities
  2. hdu5015 矩阵快速幂233(好题)
  3. 阿里云ACE共创空间——大数据方案体验1 日志服务
  4. 第一节:框架前期准备篇之Log4Net日志详解
  5. 【51nod - 1087】 1 10 100 1000(找规律推公式,水,map)
  6. 计算机中submit commit区别
  7. 181027每日一句
  8. c++使用libiconv
  9. 精英二代手柄测试软件,XBOX精英二代手柄评测视频:世界上最先进的手柄
  10. Redis数据倾斜与JD开源hotkey源码分析揭秘
  11. Windows 无法连接到无线网络
  12. 【跨域】 关于跨域的一些知识整合
  13. 有道云笔记客户端的下载和安装、使用(博主推荐)
  14. SAP定义条目视图的凭证编号范围
  15. android10 三星升级计划,三星公布Android 10.0国行升级计划:规模庞大
  16. FLAC3D 的入门介绍
  17. win10下安装openvino遇到的一些问题及解决方法
  18. STM32F4 | 新建工程模板——寄存器版本 | HAL库入门 | 新建工程模板——库函数版本
  19. 叠积木/银河系英雄传说[NOI2002]题解
  20. Hold不住的老师 HNUST 1588

热门文章

  1. 【深度学习】循环神经网络(RNN)简易教程
  2. 【pytorch学习】四种钩子方法(register_forward_hook等)的用法和注意点
  3. 截断骨干用于检测,YOLO-ReT开源:边缘GPU设备上的高性能检测器
  4. 目标检测领域还有什么可做的?19 个方向给你建议
  5. 艾瑞发布2018视频云行业报告,网易云信领跑第一阵营
  6. 战友!6.19决战光荣日,一个真实的魔兽世界在等你!
  7. Intel图形库Mesa的持续集成
  8. Shiro-授权(RBAC)
  9. 如何发挥ERP系统中的财务监控职能?
  10. struts2S2-045漏洞相关信息