想当初07、08年的时候,毕业之季,正思考着离开学校要去做什么工作。为了有一份薪资不错,可以长久发展,也正是自己喜欢的行业。于是乎决定投身于计算机行业。当年正是JAVA的火热时期。到处都是JAVA培训招生。当时的学习模式基本是学了JAVA SE、web、数据库等基础课程,就开始学习所谓的JAVA EE部分内容。其中很大一部分内容就是SSH框架、Struts+Spring+Hibernate。

  初上手做项目时,连接数据库一般都是用Hibernate框架,虽然当时也知道iBatis(当时也正是由iBatis转化成myBatis时期)。当时使用的数据库多数是用MySQL,很多的时候也会使用Oracle,市面上还有一大批客户的服务器是用的Windows Server,他们用的是SQL Server。于是当年就想,能不能用Hibernate封装成一个自己的模块。可以方便的在这几个常用数据库之间转移。

  其实当时Hibernate并没有学得太深入。使用也只是浅层次的一些API使用。更不用说去关注ORM框架的性能,更不用说去对比几种ORM框架选择合适的开展自己的项目架构。

  后来几年离开JAVA去做ActionScript 3了,从此不再学习JAVA了。当时如果继续从事JAVA,一直学习JAVA,学了Hibernate之外其它的ORM框架。相信肯定也会想封装一个自己的模块用来操作数据库。至于基于什么框架,是Hibernate,或者是myBatis,或者别的ORM框架。希望这个模块也是可以方便嵌入Hibernate或者myBatis,或者别的。应用只要用这个模块操作数据库。后期哪个ORM框架性能提升了,就可以立即将框架的jar包拷到应用里。这个模块自然的就变成基于这个ORM框架了。

  这不,好消息来了。JAVA官方做了这事了。就是我们都在关注的JPA、JPA、JPA(重要的事情说三遍)。

  那么JPA是什么呢?从我前面的描述,相信可以猜到JPA大概是个什么东西。

  再一起去看一下行家是怎么描述的。

  先看Oracle官方Java Persistence API,页面上有这这样的一段话:

The Java Persistence API provides a POJO persistence model for object-relational mapping. The Java Persistence API was developed by the EJB 3.0 software expert group as part of JSR 220, but its use is not limited to EJB software components. It can also be used directly by web applications and application clients, and even outside the Java EE platform, for example, in Java SE applications. See JSR 220.

  我把这个翻译成中文:

  JPA(Java Persistence API)为“对象-关系”映射(这种需求)提供了一个对象持久化模型方案,是由EJB3.0软件专家组做为JSR220的一部分开发的。但是JPA的使用不局限于EJB组件。它(JPA)可以直接由Web应用和客户端应用使用。甚至在Java EE平台之外使用,比如在Java SE中使用。详细请参考JSR 220

  哦,感觉还没讲得通俗易懂。再看一下百度百科,它是这样讲的:

  JPA全称Java Persistence API.JPA通过JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。

  其实这里主要是描述了两个功能。一个是怎么标注对象一关系数据库中的数据怎么对应,这里讲到可以用JDK5.0的注解,也可以用XML配置文件。还有一个功能就是,对象都已经对应到关系数据库里的数据了,自然就是怎么把这些对象存起来。用专业术语讲就是把对象持久化到数据库中。

  当然JPA完整的功能,在网上一般描述是有三点。除了这里的两点,还有一点就是怎么样以对象的角度查询数据。人家很专业,这可是又发明了一种语言----查询语言哦,叫做JPQL。关于这三点功能的描述可以参考百度百科的JPA词条的起源部分

  JPA不会太大太重,没有什么多余的功能。也不会太轻而功能足够用,一般不会因为使用的JPA而一些功能经常没法满足。JPA看起来是一个让人这么爽的东西。但是,JPA是一个虚的东西,它只是官方公布的一套接口规则,并没有真正的实现方法。仅仅只是拿着官方的这些API这些空接口,是没法真正的开发出应用的。还是要借助一些ORM框架包来完成真正的任务。那么,这样是不是太复杂了。用别人的框架,JAVA东家为什么还要来插一脚。要么官方也把JPA实现了,让用户只关注JPA就行。或者专注使用ORM框架,至于要怎么调用,由ORM框架方说了算。那JPA就失去了意义了,如果是由官方来实现JPA,其实只不过是世界上多了一种ORM框架( 由官方实现的ORM模块,名叫JPA),或者专注使用ORM框架。那还是以前的年代。并没有什么进步。

  那么JPA的进步在哪里呢?官方定义了一套API并明确说明了各部分功能,用户要怎么实现操作数据库,了解JPA规范就行了。按照JPA的游戏规则。

  但是这JPA是虚的,怎么变成一个真正有用的东西呢。当然,由原来的ORM厂商来做这事情比较简单啦。他们在ORM行业里有积累。只是他们实现JPA功能的时候,也是根据JPA的游戏规则来实现。

  如此,官方JPA规范一出,在操作数据库方面,天下大统一了。用户使用ORM框架a,或者使用ORM框架b都是同一套路。瞬间世界变得畅通起来了,没有那么多复杂的东西。

  另外一个问题,目前这空JPA都有哪些公司在实现呢?有Hibernate(具体的讲就是Hibernate Entity Manager。大名鼎鼎的Hibernate还通过了JPA的兼容认证,而且负则JPA的老大就是Hibernate的发明人)、JDO、Spring(Spring怎么也来了?花点时间了解Spring的一些具体功能,Spring很有能力的)、OpenJPA(这是Apaceh的项目,还是要关注一下的,有空了最好也学习一下怎么使用)、Toplink。

  其次,JPA和EJB又是什么关系,JPA为EJB有带来了什么好处呢。相信你关注了JPA,也愿意去好好关注一下EJB的。^_^

  

初步了解JPA的更多相关文章

  1. JPA使用入门

    JPA能干什么?我在前面一遍文章<初步了解JPA>基本描述了.不过你不需要点击回去再看.这里简单的再提一下JPA的功能,就是:(1)实现“对象-关系”映射:(2)对象持久化到数据库:(3) ...

  2. JPA原理理解

    从前面一篇<JPA使用入门>了解了JPA的简单使用.要想继续深入的使用JPA,可能了解一点原理对于学习JPA会比较有益处. 这里从JPA的功能来简单阐述JPA的原理. 从<初步了解J ...

  3. mysql存入数据出错总结

    ELECT t0.accusation_des, t0.submit_time, t0.result, t0.handle_time, t1.content, t4.nick_name,t5.cont ...

  4. 6.4 SpringData JPA的使用

    引言:该文档是参考尚硅谷的关于springboot教学视屏后整理而来.当然后面还加入了一些自己从网上收集整理而来的案例! 一.SpringData JPA初步使用 1. springdata简介 2. ...

  5. javaweb各种框架组合案例(四):maven+spring+springMVC+spring data jpa(hibernate)【失败案例】

    一.失败案例 1. 控制台报错信息 严重: Exception sending context initialized event to listener instance of class org. ...

  6. JDBC、ORM、JPA、Spring Data JPA,傻傻分不清楚?一文带你厘清个中曲直,给你个选择SpringDataJPA的理由!

    序言 Spring Data JPA作为Spring Data中对于关系型数据库支持的一种框架技术,属于ORM的一种,通过得当的使用,可以大大简化开发过程中对于数据操作的复杂度. 本文档隶属于< ...

  7. Spring Data JPA系列2:SpringBoot集成JPA详细教程,快速在项目中熟练使用JPA

    大家好,又见面了. 这是Spring Data JPA系列的第2篇,在上一篇<Spring Data JPA系列1:JDBC.ORM.JPA.Spring Data JPA,傻傻分不清楚?给你个 ...

  8. 移动端之Android开发的几种方式的初步体验

    目前越来越多的移动端混合开发方式,下面列举的大多数我都略微的尝试过,就初步的认识写个简单的心得: 开发方式 开发环境 是否需要AndroidSDK 支持跨平台 开发语言&技能 MUI Win+ ...

  9. 快速搭建springmvc+spring data jpa工程

    一.前言 这里简单讲述一下如何快速使用springmvc和spring data jpa搭建后台开发工程,并提供了一个简单的demo作为参考. 二.创建maven工程 http://www.cnblo ...

随机推荐

  1. Spring 配置解析之Properties

    http://www.cnblogs.com/dragonfei/archive/2016/10/09/5906474.html *********************************** ...

  2. R语言实战(二)数据管理

    本文对应<R语言实战>第4章:基本数据管理:第5章:高级数据管理 创建新变量 #建议采用transform()函数 mydata <- transform(mydata, sumx ...

  3. [sqoop1.99.6] 基于1.99.6版本的一个小例子

    1.创建mysql数据库.表.以及测试数据mysql> desc test;+-------+-------------+------+-----+---------+------------- ...

  4. Redis学习笔记二

    学习Redis添加Object时,由于Redis只能存取字符串String,对于其它数据类型形容:Int,long,double,Date等不提供支持,因而需要设计到对象的序列化和反序列化.java序 ...

  5. PE文件学习系列三-PE头详解

    合肥程序员群:49313181.    合肥实名程序员群:128131462 (不愿透露姓名和信息者勿加入) Q  Q:408365330     E-Mail:egojit@qq.com 最近比较忙 ...

  6. 常用的WEB服务

     1.股票行情数据 Web Service(支持香港.深圳.上海基金.债券和股票:支持多股票同时查询) http://www.webxml.com.cn/WebServices/StockInfoWS ...

  7. CSS换行文本溢出显示省略号

    现代浏览器中使用css可以实现文本溢出,使用 text-overflow: ellipsis;在有些场景下没有效果,这个时候你需要检查应用的场景是是否是块元素,是否有确切的width. 如果是行内元素 ...

  8. gulp详细入门教程-gulp demo download

    简介: gulp是前端开发过程中对代码进行构建的工具,是自动化项目的构建利器:她不仅能对网站资源进行优化,而且在开发过程中很多重复的任务能够使用正确的工具自动完成:使用她,我们不仅可以很愉快的编写代码 ...

  9. 制作简单的2D物理引擎(一)——动力学基础

    一切的基础 点 在二维平面中,点$P$就是坐标$(x,y)$,点集就是一系列坐标的集合$\{P_1,P_2,...,P_n\}$,不过这个集合是有序的(顺时针). 向量 加减运算 $$\vec{P}\ ...

  10. 几种jQuery 实现无限滚动的插件

    1.EndLess Scroll 2.infinite-scroll插件的使用