在前一篇文章中大概了解了EJB是什么?那么接下来就进一步介绍一下它与JPA有什么样的关系?及什么是JPA?JPA怎样用?

一、是什么?

第一次听说JPA是在EJB视屏中,所以一直感觉他们有不解的渊源。可是经过这一段时间学习和总结发现JPA的作用远远不局限于此。

JPA是这样定义的:JPA(Java Persistence API)是Sun官方提出的Java持久化规范。为Java开发者提供了一种对象/关系映射工具来管理Java应用中的关系数据。它的出现主要是为了简化现有的持久化开发工作和整合ORM技术。

那么在这里就简单罗列一下简单的知识点:

ORM映射元数据

Java持久化API

查询语言

注意:JPA本身不是一个新的产品,而是Java编程中的规范,用语规范现有的ORM技术,它不能代替现有的Hibernate、Toplink等ORM框架。相反。在採用JPA开发时,我们仍将使用到这些ORM框架,仅仅是此时开发出来的应用不再依赖于某个持久化提供商。

应用能够在不改动代码的情况下在不论什么JPA环境下执行。真正做到低耦合、可扩展的程序设计。

二、总体架构?

下图展示了JPA核心类和JPA接口

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

三、与EJB的关系

因为历史的原因,EJB 3与JPA有着藕断丝连的关系。

EJB 2.X中,EJB有三种类型的Bean,各自是会话Bean(SessionBean)、实体Bean(Entity Bean)和消息驱动Bean(Message Driven Bean)。

随着EJB3规范的推出,EJB中的实体Bean(EnityBean)逐渐被JPA规范所替代,这也是为什么JPA的规范会包括在EJB3的规范中的原因。

但JPA不仅可以在EJB环境中使用,也可以在J2SE的环境中使用,相对于EJB2.X的实体BEAN,使用的范围更广。

总之,简单的说,JPA尽管出自EJB3,可是其使用的范围却大于EJB3,不仅能够在JavaEE5中,也能够在JavaSE的环境中,如图所看到的EJB3和JPA的关系。

如图:

类或接口                                             
描写叙述

EntityManagerFactory    
这是一个 EntityManager
的工厂类。它创建并管理多个 EntityManager
实例。

EntityManager                      
这是一个接口,它管理的持久化操作的对象。它的工作原理类似工厂的查询实例。

Entity                                     
实体是持久性对象是存储在数据库中的记录。

EntityTransaction        它与 EntityManager
是一对一的关系。对于每个 EntityManager
。操作是由 EntityTransaction             
类维护。

Persistence                      
这个类包括静态方法来获取 EntityManagerFactory
实例。

Query                                    
该接口由每一个 JPA
供应商,可以获得符合标准的关系对象。

在上述体系结构中,类和接口之间的关系属于javax.persistence包。下图显示了它们之间的关系。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

(1)EntityManagerFactory
和 EntityManager
的关系是1对多。

这是一个工厂类 EntityManager
实例。

(2)EntityManager
和 EntityTransaction
之间的关系是1对1。对于每一个EntityManager
操作。仅仅有一个
()(3)EntityTransaction
实例。

(4)EntityManager
和 Query
之间的关系是1对多。查询数众多能够使用一个 EntityManager
实例运行。

(5)EntityManager
实体之间的关系是1对多。

一个EntityManager
实例能够管理多个实体。

四、优势

其实,JPA并非一项技术,而是一种标准。由于JPA仅仅是一套接口。本身不能完毕不论什么事情。

JPA仅仅是规范了Java持久化的官方标准。

JPA有下面几个长处。

可持久化Java对象。

JPA可以直接持久化复杂的Java对象,并可以使用JPQL语言进行复杂的查询。

JPQL是JPA专用的查询语言,是类似于SQL的面向对象的查询语言。

使用简单。

JPA使用凝视(Annotation)定义Java对象与关系数据库之间的映射,而传统的ORM多使用xml配置文件。JPA使用起来比ORM要方便。使用JPA不用关注底层使用什么数据库。

规范标准化。

JPA是JCP组织公布的,是Java官方规定的统一的API。眼下已经有多种框架实现JPA标准。使用了JPA的系统可以自由选择遵循JPA标准的框架,并可以自由更换。

事务性、大数据量。JPA底层使用关系数据库进行存储。因此具备关系数据库的特点,比如事务性、数据完整性、并发訪问、大数据量等。

与其它持久化技术相比。JPA有非常大的技术优势。

表列出了JPA与其它持久化技术的比較。

五、总结

通过对JPA的简介,让我来概括一下吧!

JPA就是一个java持久化规范。它简化了现有的持久化工作和整合ORM技术。至于它的实现就在我们的实践中慢慢体会吧!

EJB之JPA的更多相关文章

  1. EJB与JPA的关系

    转自:http://www.cnblogs.com/o-andy-o/archive/2012/04/17/2453537.html JPA是基于Java持久化的解决方案,主要是为了解决ORM框架的差 ...

  2. [Java] Spring MVC 知识点

    云图: @Service 用于标注业务层组件. 在 Spring-servlet 配置xml中,component-scan 标签默认情况下自动扫描指定路径下的包(含所有子包),将带有@Compone ...

  3. 浅入tomcat

    前言:学习笔记,以供参考 1.什么是服务器 所谓的服务器其实就是一段别人写好的程序,服务器有两个能力. a.可以帮助我们来管理资源. b.可以将资源向外界发布以便于外界来访问这个资源. 2.资源有哪些 ...

  4. 轻量级Java EE企业应用实战(第4版):Struts 2+Spring 4+Hibernate整合开发(含CD光盘1张)

    轻量级Java EE企业应用实战(第4版):Struts 2+Spring 4+Hibernate整合开发(含CD光盘1张)(国家级奖项获奖作品升级版,四版累计印刷27次发行量超10万册的轻量级Jav ...

  5. Spring注解@Component、@Repository、@Service、@Controller区别 .

    Spring 2.5 中除了提供 @Component 注释外,还定义了几个拥有特殊语义的注释,它们分别是:@Repository.@Service 和 @Controller.在目前的 Spring ...

  6. java必看书籍

    Java核心技术 卷1 基础知识(第9版)Java核心技术 卷II 高级特性(第9版) 数据库系统概念(原书第6版)Oracle 从入门到精通MySQL数据库应用从入门到精通 Java并发编程实战(第 ...

  7. [转] Spring注解@Component、@Repository、@Service、@Controller区别

    原文地址:http://blog.csdn.net/zhang854429783/article/details/6785574 很长时间没做web项目都把以前学的那点框架知识忘光了,今天把以前做的一 ...

  8. springmvc注解配置

    <?xml version="1.0" encoding="UTF-8" ?> <beans xmlns="http://www.s ...

  9. 常见JAVA框架

     Spring Framework [Java开源JEE框架] Spring是一个解决了许多在J2EE开发中常见的问题的强大框架. Spring提供了管理业务对象的一致方法并且鼓励了注入对接口编程而不 ...

随机推荐

  1. 07JavaScript数组与字符串对象

    JavaScript数组与字符串对象 5.1.1数组(Array)对象 <script> //声明一个数组并赋值; var arr = new Array("aa",& ...

  2. oracle分配权限 学习笔记--转载

    在全局数据库ORCL下创建一个用户首先在开始-->运行——>sqlplus,然后输入 sys/change_on_install as sysdba 以sys权限登陆进去 然后可以进行操作 ...

  3. oracle分析函数之ratio_to_report

    ratio_to_report主要完成对百分比的计算,语法为ratio_to_report(exp) over()也就是根据over窗口函数的作用区间,求出作用区间中的单个值在整个区间的总值的比重比如 ...

  4. 笔试算法题(20):寻找丑数 & 打印1到N位的所有的数

    出题:将只包含2,3,5的因子的数称为丑数(Ugly Number),要求找到前面1500个丑数: 分析: 解法1:依次判断从1开始的每一个整数,2,3,5是因子则整数必须可以被他们其中的一个整除,如 ...

  5. [Python3网络爬虫开发实战] 1.2.2-Selenium的安装

    Selenium是一个自动化测试工具,利用它我们可以驱动浏览器执行特定的动作,如点击.下拉等操作.对于一些JavaScript渲染的页面来说,这种抓取方式非常有效.下面我们来看看Selenium的安装 ...

  6. ExecutorService 线程池 (转发)

    1.ExecutorService java.util.concurrent.ExecutorService 接口.用来设置线程池并执行多线程任务.它有以下几个方法. Future<?> ...

  7. 数据导出Excel,动态列

    今天碰到一个需求,要求将用户回答的问卷及问题导出Excel表格,问卷对应的问题数量不一致,需要动态添加列表头,简单记录. 要导出Excel需要添加poi.jar包 用户-问卷实体(固定列): pack ...

  8. 【03】placeholder

    placeholder   表单占位符解决方案 Css Code :-moz-placeholder, ::-webkit-input-placeholder{ color: #bfbfbf; } . ...

  9. JS数组添加元素的三种方式

    1.push() 结尾添加 数组.push(元素) 参数 描述 newelement1 必需.要添加到数组的第一个元素. newelement2 可选.要添加到数组的第二个元素. newelement ...

  10. js判断对象是否为空对象的几种方法

    1.将json对象转化为json字符串,再判断该字符串是否为"{}" var data = {}; var b = (JSON.stringify(data) == "{ ...