63.JPA/Hibernate/Spring Data概念【从零开始学Spring Boot】
【从零开始学习Spirng Boot—常见异常汇总】
事情的起源,无意当中在一个群里看到这么一句描述:”有人么?默默的问一句,现在开发用mybatis还是hibernate还是jpa”? 然后大家就进行各种回答,但是没有有质疑这句话描述的合理性,个人觉得需要清楚概念的,在这里mybatis大家肯定是没有什么疑问,我们把上面那句话更改下,方便我们抛出一些点出来,去掉mybatis修改为:“现在开发是使用hibernate还是 jpa”? 那么在这里的话,我们就要清楚hibernate/jpa/spring data/spring data jpa到底怎么一个关系?
什么是JPA?
JPA全称Java Persistence API.JPA通过JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。百度百科JPA
在上面只是一个JPA的定义,我们看看另外一段更能看出是什么的描述:
JPA(Java Persistence API)是Sun官方提出的Java持久化规范。它为Java开发人员提供了一种对象/关系映射工具来管理Java应用中的关系数据。
在这段话就比较清晰了,这里有一个关键词“持久化规范”。我们可以拆成两部分进行解读“持久化”、“规范”。所谓的持久化是将程序数据在瞬时数据(比如内存中的数据)转换为持久数据(比如:保存到数据库中,磁盘文件…)。这个个人粗糙的描述,看看专业的描述,如下:
持久化(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(Java Persistence API) 兼容认证。
那么我们在描述的时候,别人问你持久化具体使用了什么,我们可以说:使用了基于Hibernate实现的JPA,或者是Hibernate JPA,那么加上spring data的,我们一般都简化说:spring data jpa,一般默认的就是使用了hibernate进行实现,现在网上这方面的资料也比较多,可能就约定俗成了。当然你要别人清楚的话,可以自己在进行补充下。
好了,这个困惑就到这里,在这里就是博主个人的一些见解,有什么个别的见解都可以在评论中探讨,如有错误之处,请指正。
这篇也是博主花了一些心血去梳理的,请大家都都支持。
【Spring Boot 系列博客】
61. mybatic insert异常:BindingException: Parameter 'name' not found【从零开始学Spring B】
60. Spring Boot写后感【从零开始学Spring Boot】
59. Spring Boot Validator校验【从零开始学Spring Boot】
58. Spring Boot国际化(i18n)【从零开始学Spring Boot】
57. Spring 自定义properties升级篇【从零开始学Spring Boot】
56. spring boot中使用@Async实现异步调用【从零开始学Spring Boot】
55. spring boot 服务配置和部署【从零开始学Spring Boot】
54. spring boot日志升级篇—logback【从零开始学Spring Boot】
52. spring boot日志升级篇—log4j多环境不同日志级别的控制【从零开始学Spring Boot】
51. spring boot属性文件之多环境配置【从零开始学Spring Boot】
50. Spring Boot日志升级篇—log4j【从零开始学Spring Boot】
49. spring boot日志升级篇—理论【从零开始学Spring Boot】
48. spring boot单元测试restfull API【从零开始学Spring Boot】
47. Spring Boot发送邮件【从零开始学Spring Boot】
46. Spring Boot中使用AOP统一处理Web请求日志
45. Spring Boot MyBatis连接Mysql数据库【从零开始学Spring Boot】
44. Spring Boot日志记录SLF4J【从零开始学Spring Boot】
43. Spring Boot动态数据源(多数据源自动切换)【从零开始学Spring Boot】
42. Spring Boot多数据源【从零开始学Spring Boot】
41. Spring Boot 使用Java代码创建Bean并注册到Spring中【从零开始学Spring Boot】
40. springboot + devtools(热部署)【从零开始学Spring Boot】
39.4 Spring Boot Shiro权限管理【从零开始学Spring Boot】
39.3 Spring Boot Shiro权限管理【从零开始学Spring Boot】
39.2. Spring Boot Shiro权限管理【从零开始学Spring Boot】
39.1 Spring Boot Shiro权限管理【从零开始学Spring Boot】
38 Spring Boot分布式Session状态保存Redis【从零开始学Spring Boot】
37 Spring Boot集成EHCache实现缓存机制【从零开始学Spring Boot】
36 Spring Boot Cache理论篇【从零开始学Spring Boot】
35 Spring Boot集成Redis实现缓存机制【从零开始学Spring Boot】
34Spring Boot的启动器Starter详解【从零开始学Spring Boot】
33 Spring Boot 监控和管理生产环境【从零开始学Spring Boot】
32 Spring Boot使用@SpringBootApplication注解【从零开始学Spring Boot】
63.JPA/Hibernate/Spring Data概念【从零开始学Spring Boot】的更多相关文章
- 74. Spring Data JPA方法定义规范【从零开始学Spring Boot】
[从零开始学习Spirng Boot-常见异常汇总] 事情的起因:有人问过我们这个这个问题:为什么我利用Spring data jpa写的方法没有按照我想要的情况进行执行呢?我记得当时只是告诉他你你先 ...
- (41)Spring Boot 使用Java代码创建Bean并注册到Spring中【从零开始学Spring Boot】
已经好久没有讲一些基础的知识了,这一小节来点简单的,这也是为下节的在Spring Boot中使用多数据源做准备. 从Spring 3.0开始,增加了一种新的途径来配置Bean Definition,这 ...
- (7)JPA - Hibernate【从零开始学Spring Boot】
在说具体如何在spring boot 使用Hibernate前,先抛装引玉些知识点?什么是JPA呢? JPA全称Java Persistence API.JPA通过JDK 5.0注解或XML描述对象- ...
- (8). 使用JPA保存数据【从零开始学Spring Boot】
在看这一篇文档的话,需要先配置好JPA – Hibernate. 总体步骤: (1) 创建实体类Demo,如果已经存在,可以忽略. (2) 创建jpa repository类操作持久化. (3 ...
- 64.JPA命名策略【从零开始学Spring Boot】
[从零开始学习Spirng Boot-常见异常汇总] 在(39.2). Spring Boot Shiro权限管理[从零开始学Spring Boot] 这一章节中有人碰到这样一个问题"导入的 ...
- 69. JPA实体Bean的生命周期【从零开始学Spring Boot】
[从零开始学习Spirng Boot-常见异常汇总] 在使用JPA的时候,如果对bean的生命周期不了解的话,难免会碰到一些问题,比如:InvalidDataAccessApiUsageExcepti ...
- 81. Spring Boot集成JSP疑问【从零开始学Spring Boot】
[原创文章,转载请注明出处] 针对文章: ()Spring Boot 添加JSP支持[从零开始学Spring Boot] 有网友提了这么一些疑问: 1.Spring Boot使用jsp时,仍旧可以打成 ...
- 78. Spring Boot完美使用FastJson解析JSON数据【从零开始学Spring Boot】
[原创文章,转载请注明出处] 个人使用比较习惯的json框架是fastjson,所以spring boot默认的json使用起来就很陌生了,所以很自然我就想我能不能使用fastjson进行json解析 ...
- 77. Spring Boot Use Thymeleaf 3【从零开始学Spring Boot】
[原创文章,转载请注明出处] Spring Boot默认选择的Thymeleaf是2.0版本的,那么如果我们就想要使用3.0版本或者说指定版本呢,那么怎么操作呢?在这里要说明下 3.0的配置在spri ...
随机推荐
- Poj 3294 Life Forms (后缀数组 + 二分 + Hash)
题目链接: Poj 3294 Life Forms 题目描述: 有n个文本串,问在一半以上的文本串出现过的最长连续子串? 解题思路: 可以把文本串用没有出现过的不同字符连起来,然后求新文本串的heig ...
- 数学 SCU 4436 Easy Math
题目传送门 /* 数学题:当有一个数开根号后是无理数,则No */ #include <cstdio> #include <algorithm> #include <cs ...
- 题解报告:hdu1994利息计算
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1994 Problem Description 为自行解决学费,chx勤工俭学收入10000元以1年定期 ...
- Matlab调用C程序 分类: Matlab c/c++ 2015-01-06 19:18 464人阅读 评论(0) 收藏
Matlab是矩阵语言,如果运算可以用矩阵实现,其运算速度非常快.但若运算中涉及到大量循环,Matlab的速度令人难以忍受的.当必须使用for循环且找不到对应的矩阵运算来等效时,可以将耗时长的函数用C ...
- ActionEvent之TextField
这里我们讲这个TestField类 也就是我们的输入框,什么输入密码,用户名什么的. 一些方法: 这里说到TestField也会有事件发生,就是当你在文本框敲回车的时候. 看个例子: import j ...
- windows系统下如何正确安装Cygwin(图文详解)
我的操作系统信息是 1.在官网https://cygwin.com/install.html下载win64位安装包 选择包的下载存放目录,点击“下一步” 为了使我们安装的Cygwin能够编译程序, ...
- Android开发学习——Volley框架
转载至: http://blog.csdn.net/guolin_blog/article/details/17482095 一些概念性的东西 大家进入上边链接理解,我贴一下 具体的实现代码: pub ...
- AJPFX总结Java 类与对象的初始化
面试的时候,经常会遇到这样的笔试题:给你两个类的代码,它们之间是继承的关系,每个类里只有构造器方法和静态块,它们只包含一些简单的输出字符串到控制台的代码,然后让我们写出正确的输出结果.这实际上是在考察 ...
- css3中content属性的应用
可以使用css3中content功能为html元素增减内容.content需要配合 E:before和E:after使用. 废话少说,看代码和效果说明: 第一种: css代码: #div1:befor ...
- struts2通过配置文件进行数据校验无效
网络搜集常见解决方案: 1. 首先应该注意validation.xml的名字,一定要以Action的类名加“-validation.xml”作为文件名,如LoginAction-validation. ...