【从零开始学习Spirng Boot—常见异常汇总】程序员
事情的起源,无心当中在一个群里看到这么一句描述:”有人么?默默的问一句,如今开发用mybatis仍是hibernate仍是jpa”?而后你们就进行各类回答,可是没有有质疑这句话描述的合理性,我的以为须要清楚概念的,在这里mybatis你们确定是没有什么疑问,咱们把上面那句话更改下,方便咱们抛出一些点出来,去掉mybatis修改成:“如今开发是使用hibernate仍是jpa”?那么在这里的话,咱们就要清楚hibernate/jpa/springspring
data/spring data jpa到底怎么一个关系?数据库
什么是JPA?编程
JPA全称Java Persistence API.JPA经过JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。百度百科JPAmybatis
在上面只是一个JPA的定义,咱们看看另一段更能看出是什么的描述:架构
JPA(Java Persistence API)是Sun官方提出的Java持久化规范。它为Java开发人员提供了一种对象/关系映射工具来管理Java应用中的关系数据。app
在这段话就比较清晰了,这里有一个关键词“持久化规范”。咱们能够拆成两部分进行解读“持久化”、“规范”。所谓的持久化是将程序数据在瞬时数据(好比内存中的数据)转换为持久数据(好比:保存到数据库中,磁盘文件…)。这个我的粗糙的描述,看看专业的描述,以下:框架
持久化(Persistence),即把数据(如内存中的对象)保存到可永久保存的存储设备中(如磁盘)。持久化的主要应用是将内存中的对象存储在的数据库中,或者存储在磁盘文件中、XML数据文件中等等。编程语言
持久化是将程序数据在持久状态和瞬时状态间转换的机制。工具
JDBC就是一种持久化机制。文件IO也是一种持久化机制。
好了,上面已经描述很清楚了,咱们在说说“规范”: 所谓的规范意指明文规定或约定俗成的标准。如:道德规范、技术规范,公司管理规范。
那么“持久化规范”就是Sun针对持久化这一层操做指定的规范,若是没有指定JPA规范,那么新起的框架就随意按照本身的标准来了,那咱们开发者的世界就玩完了,咱们就无法把咱们的经历所有集中在咱们的业务层上,而是在想咱们进行兼容了,这种状况有点像Android开发,Android自己有官方的SDK,可是因为SDK过于开源了,结果致使不少厂商基于SDK二次开发,可是开发完兼容性就不是很好,最好的例子就是Android的头像上传,就是一件很烦人的事情。好了,JPA就唠叨到这里。
什么是Hibernate?
这里引用百度百科的话hibernate:
Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了很是轻量级的对象封装,它将POJO与数据库表创建映射关系,是一个全自动的orm框架,hibernate能够自动生成SQL语句,自动执行,使得Java程序员能够为所欲为的使用对象编程思惟来操纵数据库。Hibernate能够应用在任何使用JDBC的场合,既能够在Java的客户端程序使用,也能够在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate能够在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。
在上面这段描述中抓住核心的一句话就能够了“是一个全自动的ORM框架”。那么是ORM呢? ORM是对象关系映射的意思,英语:Object Relational Mapping简称ORM,是一种程序技术,用于实现面向对象编程语言里不一样系统类型的系统之间的数据转换。好了,更多的概念须要本身去挖掘,这里只是抛装引玉下。
什么是Spring Data?
Spring Data是一个用于简化数据库访问,并支持云服务的开源框架。其主要目标是使得数据库的访问变得方便快捷,并支持map-reduce框架和云计算数据服务。此外,它还支持基于关系型数据库的数据服务,如Oracle
RAC等。对于拥有海量数据的项目,能够用Spring Data来简化项目的开发,就如Spring Framework对JDBC、ORM的支持同样,Spring Data会让数据的访问变得更加方便。
在上面这段描述中我以为核心的就是“Spring Data是用于简化数据库访问,支持云服务的开源框架”。因此Spring Data自己就是一个开源的框架。
什么是Spring Data JPA?
咱们先看一个描述:
Spring Data JPA能干什么
能够极大的简化JPA的写法,能够在几乎不用写实现的状况下,实现对数据的访问和操做。除了CRUD外,还包括如分页、排序等一些经常使用的功能。
首先咱们须要清楚的是Spring Data是一个开源框架,在这个框架中Spring Data JPA只是这个框架中的一个模块,因此名称才叫Spring
Data JPA。若是单独使用JPA开发,你会发现这个代码量和使用JDBC开发同样有点烦人,因此Spring Data JPA的出现就是为了简化JPA的写法,让你只须要编写一个接口继承一个类就能实现CRUD操做了。
JPA/Hibernate关系?
咱们先看下别人的描述:
Jpa是一种规范,而Hibernate是它的一种实现。除了Hibernate,还有EclipseLink(曾经的toplink),OpenJPA等可供选择,因此使用Jpa的一个好处是,能够更换实现而没必要改动太多代码。
从上面这个描述,咱们能就是能看出: JPA定义了一个规范,Hibernate是其中的一种实现方式能够,因此咱们能够说:Hibernate是JPA的一种实现方式。可是这么说就有点欠稳当了:开发是使用hibernate仍是jpa。若是你回答使用JPA的话,那么你根本作不了什么事情,由于你须要使用它具体的一种实现方式,好比:Hibernate,EclipseLink,toplink。若是回答说是使用Hibernate的话,还勉强说的过去,可是在Hibernate中也有JPA的影子。可是这里不要形成一个误解,hibernate必定依赖JPA什么之类的,JPA如今只是Hibernate功能的一个子集。Hibernate从3.2开始,开始兼容JPA的。Hibernate3.2得到了Sun
TCK的JPA(JavaPersistence API)兼容认证。
那么咱们在描述的时候,别人问你持久化具体使用了什么,咱们能够说:使用了基于Hibernate实现的JPA,或者是Hibernate JPA,那么加上spring data的,咱们通常都简化说:spring data jpa,通常默认的就是使用了hibernate进行实现,如今网上这方面的资料也比较多,可能就约定俗成了。固然你要别人清楚的话,能够本身在进行补充下。
好了,这个困惑就到这里,在这里就是博主我的的一些看法,有什么个别的看法均可以在评论中探讨,若有错误之处,请指正。
这篇也是博主花了一些心血去梳理的,请你们都都支持。
视频+交流平台:
àSpring Boot网易云课堂视频
àSpring Boot交流平台