JPA开发文档大全.docx

上传人:b****3 文档编号:2875179 上传时间:2022-11-16 格式:DOCX 页数:27 大小:31.23KB
下载 相关 举报
JPA开发文档大全.docx_第1页
第1页 / 共27页
JPA开发文档大全.docx_第2页
第2页 / 共27页
JPA开发文档大全.docx_第3页
第3页 / 共27页
JPA开发文档大全.docx_第4页
第4页 / 共27页
JPA开发文档大全.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

JPA开发文档大全.docx

《JPA开发文档大全.docx》由会员分享,可在线阅读,更多相关《JPA开发文档大全.docx(27页珍藏版)》请在冰豆网上搜索。

JPA开发文档大全.docx

JPA开发文档大全

 JPA开发文档(大全)

这是一份比较全面的JPA文档,希望能够帮助大家,让大家更好的学习工作。

 

1.    发展中的持久化技术

1.1JDBC

很多企业应用的开发者选择使用JDBC管理关系型数据库中的数据。

JDBC支持处理大量的数据,能够保证数据的一致性,支持信息的并发访问,提供SQL查询语言查找数据。

JDBC所使用的关系模型不是为保存对象而设计的,因此迫使开发者选择在处理持久数据时放弃面向对象编程,或者自己去开发将面向对象特性(比如:

类之间的继承)和关系型数据库进行映射的专有解决方案。

1.2关系对象映射(ObjectRelationalMapping,ORM)

ORM是目前完成对象和关系数据表之间的映射最好的一种技术,这些ORM框架处理对象和关系数据库之间的协调工作,将开发者从这部分工作中解脱出来,集中精力处理对象模型。

阻碍ORM发展的问题是,现有的每一种ORM产品都有自己特有的API,开发者只能将自己的代码绑定到某一个框架提供商的接口上,这种状况形成了厂商锁定,意味着一旦该框架提供商无法解决系统中出现的严重错误,或者因为其它的原因转而采用其它的框架,将会给开发者的企业应用带来极大的困难,唯一的解决办法是重写所有的持久化代码。

1.3Java数据对象(JavaDataObject,JDO)

JDO是JavaEE标准中另外一个支持管理持久化数据的规范,JDO规范使用和JPA非常类似的API,只是通常是通过JCA技术集成到应用服务器上。

但是JDO是针对轻量级容器而设计的,不能够支持容器级别的声明式安全、事务特性,也无法对远程方法调用提供支持。

1.4JavaPersistenceAPI(JPA)

EJB3.0规范由三部分组成:

EJB3.0SimplifiedAPI、EJB核心规范(EJBCoreContractsandRequirements)和JPA(JavaPersistenceAPI)。

JPA规范部分详细的介绍了JPA中实体Bean的定义,并介绍了实体Bean支持的注释、全新的查询语言、实体管理接口、容器实现规范等内容。

JPA标准制定过程中充分吸收了目前已经出现的所有持久化技术的所有优点,摒弃了它们存在的局限,使JPA在简单易用、查询能力等方面表现突出。

 

标准化

JPA是JCP组织发布的JavaEE标准之一,因此任何声称符合JPA标准的框架都遵循同样的架构,提供相同的访问API,这保证了基于JPA开发的企业应用能够经过少量的修改就能够在不同的JPA框架下运行。

 

对容器级特性的支持

JPA框架中支持大数据集、事务、并发等容器级事务,这使得JPA超越了简单持久化框架的局限,在企业应用发挥更大的作用。

 

简单易用,集成方便

JPA的主要目标之一就是提供更加简单的编程模型:

在JPA框架下创建实体和创建Java类一样简单,没有任何的约束和限制,只需要使用javax.persistence.Entity进行注释;JPA的框架和接口也都非常简单,没有太多特别的规则和设计模式的要求,开发者可以很容易的掌握。

JPA基于非侵入式原则设计,因此可以很容易的和其它框架或者容器集成。

 

可媲美JDBC的查询能力

JPA定义了独特的JPQL(JavaPersistenceQueryLanguage),JPQL是EJBQL的一种扩展,它是针对实体的一种查询语言,操作对象是实体,而不是关系数据库的表,而且能够支持批量更新和修改、JOIN、GROUPBY、HAVING等通常只有SQL才能够提供的高级查询特性,甚至还能够支持子查询。

 

 

支持面向对象的高级特性

JPA中能够支持面向对象的高级特性,比如类之间的继承、多态和类之间的复杂关系,这样的支持能够让开发者最大限度的使用面向对象的模型设计企业应用,而不需要自行处理这些特性在关系数据库的持久化。

 

支持内容:

JDBC

ORM

JDO

EJB3(JPA)

Java对象

No

Yes

Yes

Yes

高级OO原理

No

Yes

Yes

Yes

事务完整性

Yes

Yes

Yes

Yes

并发

Yes

Yes

Yes

Yes

大数据集

Yes

Yes

Yes

Yes

现有Schema

Yes

Yes

Yes

Yes

关系型和非关系型数据存储

No

No

Yes

No

查询

Yes

Yes

Yes

Yes

严格的标准/可移植

No

No

Yes

Yes

简单易用

Yes

Yes

Yes

Yes

表1持久化技术的优缺点

2.    JPA体系架构

JPA中定义一套类和接口用于实现持久化管理和对象/关系的映射,下面这张图中显示了JPA的主要组件以及它们之间的相互关系。

图1JPA主要组件和相互关系

∙EntityManagerFactory

EntityManagerFactory是EntityManager的工厂类,负责创建EntityManager对象。

∙EntityManager

EntityManager是JPA应用中使用的基本对象,通过它提供的相应方法可以管理持久化对象,也可以新建或者删除持久化对象。

EntityManager还负责创建Query实例。

在容器外使用时,EntityManagerFactory和EntityManager之间是一对一的关系。

∙Entity

EntityTransaction提供Entity操作时需要的事务管理,和EntityManager是一对一的关系。

在查询操作时不需要使用EntityTransaction,而在对象持久化、状态更新、对象删除等情况下则必须使用显式的使用EntityTransaction的相关方法管理事务。

∙Query

Query是查询实体的接口,Query对象可以从EntityManager中获得。

根据EJB3.0规范中的描述,Query接口需要同时支持JPQL和原生态SQL两种语法。

∙Persistence

Persistence是一个工具类,负责根据配置文件提供的参数创建EntityManagerFactory对象。

 

下面的代码演示了如何通过JPA提供的接口和JPQL查询语言完成实体查询和更新的例子,例子中的代码假定运行在非JavaEE环境中。

 

清单1在非JavaEE环境使用JPA接口的例子

EntityManagerFactoryfactory=Persistence.createEntityManagerFactory(“mysql”);

//从EntityManagerFactory实例factory中获取EntityManager

EntityManagerem=factory.createEntityManager(PersistenceContextType.EXTENDED);

 

//实体的更新需要在事务中运行

EntityTransactiontx=em.getTransaction();

tx.begin();

//查找所有公司中的女性雇员

Queryquery=em.createQuery("selectefromEmployeeewheree.sex='femail'");

Listresults=query.getResultList();

//给所有女性雇员增加半天假期

for(Objectres:

results)

{

Employeeemp=(Employee)res;

emp.setHoliday(emp.getHoliday()+0.5);

}

//提交事务(持久化所有更新)

mit();

em.close();

factory.close();

 

下面的代码显示了在EJB容器中开发JPA应用时的接口使用情况,由于容器中的EntityManager是注入的,事务也是声明式的,因此在容器中完成上面的业务逻辑要简单得多。

 

清单2在容器中运行的JPA例子

/*

*在容器中运行JPA应用时,EntityManager接口的实例”em”

*是通过@Resource注释注入的。

事务也通常是声明式的。

*/

//查找所有公司中的女性雇员

Queryquery=em.createQuery("selectefromEmployeeewheree.sex='femail'");

Listresults=query.getResultList();

 

//给所有女性雇员增加半天假期

for(Objectres:

results)

{

Employeeemp=(Employee)res;

emp.setHoliday(emp.getHoliday()+0.5);

}

 

 

3.    EntityBean

EJB3Entity可以是很简单的javabean,只要批注了@Entity或者在xml配置中作了说明,就被做一个可持久化的Entity处理。

但还是需要遵行一定的规则:

∙        Entity类必须要有一个无参数的public或者protected的Constructor。

∙        如果在应用中需要将该Entity类分离出来在分布式环境中作为参数传递,该EntityClass需要实现java.io.Serialzable接口。

∙        Entity类不可以是final,也不可有final的方法。

∙        abstract类和Concrete实体类都可以作为Entity类。

∙        Entity类中的属性变量不可以是public。

Entity类的属性必须通过getter/setter或者其他的商业方法获得。

3.1定义对Entity中属性变量的访问

在绝大部分的商业应用,开发人员都可以忽略这部分无需关心。

但如果你需要编写复杂的Entity类的话,你需要了解这个部分。

复杂的Entity类是指在Entity类的getter/setter和商业方法中包含比较复杂的业务逻辑而不是仅仅返回/符值某个属性。

在大部分的情况下,我们都建议使Entity类中setter/getter中的逻辑尽可能简单,除了必要的校验符值外,不要包含复杂的业务逻辑,例如对关联的其他Entity类进行操作。

但有些情况下,我们还是需要在Entity类的setter/getter方法中包含商业逻辑。

这时候,采用何种属性访问方式就可能会影响代码的性能甚至是逻辑正确产生影响。

EJB3持久化规范中,在默认情况下所有的属性都会自动的被持久化,除非属性变量用@Transient元数据进行了标注。

针对可持久化属性定义了两种属性访问方式(access):

FIELD和PROPERTY。

∙        如果采用access=FIELD,EJB3Persistence运行环境直接访问对象的属性变量,而不是通过getter。

这种访问方式也不要求每个属性必须有getter/setter。

如果需要在getter中包含商业

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 幼儿教育 > 少儿英语

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1