说到JPA,大家可能没有Hibernate听起来那么熟悉,那我就通过一张图让大家了解一下,什么是JPA。下图是JPA在系统架构中的作用:
由以上图片我们可以得出两个结论:首先JPA的主要作用就是持久化操作;其次JPA只是一种规范,它需要一种实现,正如上图显示的,Hibernate、oPenJPA等等。简单些,可以说JPA只是一套接口,本身不能完成任何事情。
知道什么是JPA之后,我们就要说一说我们为什么倾向于使用JPA了。它的优势主要有以下三点:
(1)可持久化Java对象。
JPA能够直接持久化复杂的Java对象,并能够使用JPQL语言进行复杂的查询。JPQL是JPA专用的查询语言,是类似于SQL的面向对象的查询语言。
(2)使用简单。
注解方式(不同于其他的配置文件);相信大部分人都感受并使用过Hibernate,令人印象什么的就是一个Java实体对象必须要对应一个xml文件,方可持久化到数据库中。而JPA则使用注解定义Java对象与关系数据库之间的映射。
(3)规范标准化。
目前已经有很多持久化框架实现JPA标准,使用了JPA的系统可自由更换框架。
差不多清楚什么是JPA,以及我们为什么使用JPA了吧。接下来我们就来说一说让初学者最迷糊的一件事情,就是EJB和JPA的关系。
虽然没有使用过EJB2.X,但是通过查阅资料(大部分相关书籍还是讲解的EJB2.X),我们可以知道,EJB2.X有三种类型的Bean,分别是会话Bean、实体Bean和消息驱动Bean。
但是随着EJB3规范的推出,EJB中的实体Bean逐渐被JPA规范所替代,这也正是为什么JPA的规范包含在EJB3的规范中的原因。但有一点值得我们注意,那就是JPA不仅能够在EJB环境中使用,也能在J2SE的环境中使用,相对于EJB2.X中的实体Bean,使用的范围更加广阔了。
听了上面那么多介绍不知道大家了解没有EJB和JPA的关系,如果不了解,没有关系,我再简单一点说:JPA虽然出自EJB3,但其使用的范围却大于EJB3,不仅可用在JavaEE的环境中,也可以用在JavaSE的环境中。如下图所示:
通过以上三点的讲解,什么是JPA,JPA的优势以及JPA和EJB的关系,相信大家对于JPA已经有了一个最宏观的认识,接下来我们就要一步一步慢慢深入,发现JPA的内在之美了。