点点滴滴的学习

初步了解JPA

  想当初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的。^_^

  

posted on 2015-11-28 15:53  袁良锭  阅读(1082)  评论(0编辑  收藏  举报

导航