JPA从入门到精通_第1页
JPA从入门到精通_第2页
JPA从入门到精通_第3页
JPA从入门到精通_第4页
JPA从入门到精通_第5页
已阅读5页,还剩53页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、JPA JPA 简介简介主要内容主要内容JPA概述使用JPA的步骤实体JPA的APIJPQL 主要内容主要内容JPA概述使用JPA的步骤实体JPA的APIJPQLJPA概述JPA是什么JPA的产生为什么要使用JPAJPA和Hibernate的关系JPA的供应商JPA的实现JPA的优势JPA的缺点JPA主要的技术一、一、JPA概述概述JPA 是什么是什么 Java Persistence API,用于对象持久化的API是Java EE 5.0 平台标准的 ORM ORM 规范规范,使得应用程序以统一的方式访问持久层一、一、JPA概述概述JPA 是什么是什么 JPA 是是EJB3 Entity B

2、ean,是一套从EJB3.0核心标准中分离出来的独立的标准文档J2EE 4规范中最为人所熟悉的用来处理数据持久的Entity Bean,在Java EE5中被推到重来,取而代之的是java开发的通用持久化规范Java Persistence API 1.0, 其实就是完全重新定义了的Entity Bean规范;JPA作为java中负责关系数据持久化的组件已经完全独立出来成为一个单独的规范,而不再属于Enterprise Java Bean的范畴(EJB更多的是指Stateless/Stateful session bean和Message Driven Bean)。使用的 Java 的版本决定

3、了实际是否可以应用 JPA。因为JPA 是 EJB 3.0 规范的一部分,而EJB 3.0 规范是 Java EE 5 版本的一部分。如果您未更新到 Java EE 5,则无法使用 JPA。 一、一、JPA概述概述JPA 是什么是什么 提供了以pojo编程模型为持久化对象的机制:通过 JDK 5.0 注解或 XML 描述对象关系表的映射关系,并将运行期的实体对象持久化到数据库中,下图描述了 JPA 的结构: 一、一、JPA概述概述JPA的产生的产生Sun引入新的引入新的 JPA ORM规范出于两个原因:规范出于两个原因:其一,简化现有Java EE和 Java SE应用的对象持久化的开发工作:

4、和实体Bean相比,不需要配置文件,提供了更好的开发体验不同于 EJB 3.0,JPA并不是J2EE环境专用,在J2SE的环境中也可以使用(不依赖J2EE容器,是java中的通用API)其二,Sun希望整合ORM技术,统一各种ORM框架的规范,实现天下归一。(目前Hibernate 3.2、TopLink 10.1.3以及OpenJpa都提供了JPA的实现)一、一、JPA概述概述为什么要使用为什么要使用JPA一、一、JPA概述概述JPA和和Hibernate的关系的关系JPA是hibernate的一个抽象或者可以理解为接口(就像JDBC和JDBC驱动的关系):JPA是规范:JPA本质上就是一种

5、ORM规范,不是ORM框架因为JPA并未提供ORM实现,它只是制订了一些规范,提供了一些编程的API接口,但具体实现则由用用服务器厂商来提供实现Hibernate 是实现:Hibernate除了作为ORM框架之外,它也是一种JPA实现从功能上来说, JPA现在就是现在就是Hibernate功能的一个子集功能的一个子集一、一、JPA概述概述JPA的供应商的供应商 JPA 的目标之一是制定一个可以由很多供应商实现的API,目前Hibernate 3.2、TopLink 10.1.3以及OpenJpa都提供了JPA的实现HibernateJPA的始作俑者就是Hibernate的作者Hibernate

6、 从3.2开始,就开始兼容JPAOpenJPAOpenJPA 是 Apache 组织提供的开源项目TopLinkTopLink以前需要收费,如今开源了;OpenJPA虽然免费,但功能、性能、普及性等方面更加需要加大力度。一、一、JPA概述概述JPA的实现的实现JPA做为Java EE5里面的新成员,跟jdbc一样就是一接口,具体实现由服务器实现你选择什么服务器就基本上决定了用哪个JPA实现JBoss就是用hibernate去实现的weblogic是用OpenJPAOracle是用TopLink一、一、JPA概述概述JPA的的优势优势标准化标准化提供相同的访问 API,这保证了基于JPA开发的企

7、业应用能够经过少量的修改就能够在不同的JPA框架下运行。越来越多的提供商期待在不久的将来提供 JPA 实施。 对容器级特性的支持对容器级特性的支持 JPA 框架中支持大数据集、事务、并发等容器级事务简单易用,集成方便简单易用,集成方便 JPA的主要目标之一就是提供更加简单的编程模型,在JPA框架下创建实体和创建Java 类一样简单,只需要使用 javax.persistence.Entity进行注释;JPA的框架和接口也都非常简单,可媲美可媲美JDBC的查询能力的查询能力 JPA的查询语言是面向对象的,JPA定义了独特的JPQL,而且能够支持批量更新和修改、JOIN、GROUP BY、HAVI

8、NG 等通常只有 SQL 才能够提供的高级查询特性,甚至还能够支持子查询。支持面向对象的高级特性支持面向对象的高级特性 JPA 中能够支持面向对象的高级特性,如类之间的继承、多态和类之间的复杂关系,最大限度的使用面向对象的模型一、一、JPA概述概述JPA的缺点的缺点由于非常新,JPA 规范可能还需要进过重要发展才会变得很稳定。JPA是一个规范而不是一个产品。需要提供商提供一个实施,才能获得这些基于标准的 API 的优势。JPA是Hibernate、TopLink,JDO等ORM框架真子集,只提供其中最好的功能,如果应用程序中需要的功能,但是规范中没有提供的功能,则使用供应商特有的API,移植起

9、来比较麻烦,所以要尽可能地使用JPAAPI。一、一、JPA概述概述JPA包括包括 3方面的技术方面的技术ORMORM映射元数据映射元数据:JPA支持XML和 JDK 5.0注解两种元数据的形式,元数据描述对象和表之间的映射关系,框架据此将实体对象持久化到数据库表中。 JPAJPA的的APIAPI:用来操作实体对象,执行CRUD操作,框架在后台替我们完成所有的事情,开发者从繁琐的 JDBC和 SQL代码中解脱出来。 查询语言查询语言:这是持久化操作中很重要的一个方面,通过面向对象而非面向数据库的查询语言查询数据,避免程序的 SQL语句紧密耦合。主要内容主要内容JPA概述使用JPA的步骤实体JPA

10、的APIJPQL二、二、使用使用JPA持久化对象的步骤持久化对象的步骤创建persistence.xml,在这个文件中配置持久化单元(Hibernate中的hibernate.cfg.xml);需要指定跟哪个数据库进行交互;需要指定JPA使用哪个持久化的框架;(因为他本身没有持久化能力);创建EntityManagerFactory(Hibernate中的SessionFactory);创建EntityManager(实体管理器)(Hibernate中的Session);创建实体类,使用annotation来描述实体类跟数据库表之间的一一映射关系.使用JPA API完成数据增加、删除、修改和查

11、询操作JPA的执行过程的执行过程 persistence.xml持久化单元持久化单元持久化单元持久化单元 :persistence-unit数据库相关的信息持久化提供者信息(Hibernate、Toplink)厂商的一些客户化属性其他可选的一些元数据如果使用不同的持久化提供程序,那么需要指定提供程序类附加的ORM映射文件 附加的ORM映射文件附加实体的JAR文件一个持久化单元可以创建一个一个持久化单元可以创建一个EntityManagerFactory持久化提供者持久化提供者Persistence Provider:持久化提供者持久化提供者JPA只是一套标准的持久化API,它需要通过一个ORM

12、框架,才能进行持久化,我们把这个能和JPA集成起来的ORM框架称为持久化的提供者;每一个支持ebj3.0 JPA的ORM框架必须提供一个实现javax.persistence.spi.PersistenceProvider接口的实现类,通过它创建EntityManager对象使用使用JPA实现增加、删除、修改和查询操作实现增加、删除、修改和查询操作EntityManagerFactory实体管理器的工厂,类似于Hibernate 中的SessionFactory通过持久化提供者Persistence Provider创建这个对象应用程序管理用来创建EntityManager实例一个数据库创建一

13、个EntityManagerFactory对象EntityManager实体管理器,类似于Hibernate的Session由EntityManagerFacotry创建用来访问持久化上下文中实体对象的一个接口,管理实体对象与底层数据源之间进行O/R映射,包括增删改查一个线程一个EntityManager对象,EntityManager获取EntityManager对象的方式应用程序管理EntityManager应用程序通过javax.persistence.EntityManagerFactory的createEntityManager创建EntityManager实例容器管理EntityM

14、anager通过依赖注入获取Persistence Context:持久化上下文持久化上下文其实就是JPA的一级缓存是一系列实体的管理环境,实体对象集合被EntityManager管理着的,通过EntityManager和持久化上下文进行交互。持久化上下文类型 应用程序管理应用程序来管理所需资源持久化上下文是绑定到当前EntityManager 容器管理,又分为两种:和事务范围相关持久化上下文事务启动就会创建,事务结束也会结束;在无状态session bean中使用;扩展的持久化上下文和有状态session bean结合使用,它的生命周期和事务无关;当Session bean对象创建,持久化上

15、下文就创建;当Session bean对象销毁,持久化上下文就结束JPA的使用步骤的使用步骤JPA的使用步骤的使用步骤JPA的使用步骤的使用步骤主要内容主要内容JPA概述使用JPA的步骤实体JPA的APIJPQL三、三、实体实体三、三、实体实体三、三、实体实体三、三、实体实体三、三、实体实体实体的定义实体的定义 实体具备以下的条件:必须使用 javax.persistence.Entity注解或者在 XML映射文件中有对应的元素; 必须具有一个不带参的构造函数,类不能声明为final,方法和需要持久化的属性也不能声明为 final; 如果游离状的实体对象需要以值的方式进行传递,如通Sessio

16、n bean的远程业务接口传递,则必须实现 Serializable接口; 需要持久化的属性,其访问修饰符不能是public,它们必须通过实体类方法进行访问。三、三、实体实体Annotation 基本注解基本注解 基本注解基本注解Entity将对象标注为一个实体,表示需要保存到数据库中默认情况下类名即为表名,通过name属性显式指定表名Id对应的属性是表的主键GeneratedValue主键的产生策略,通过strategy属性指定;默认情况下,JPA自动选择一个最适合底层数据库的主键生成策略可供选择的策略IDENTITY:表自增键字段(SqlServer对应策略,Oracle不支持这种方式)A

17、UTO: JPA自动选择合适的策略,是默认选项(MySql对应策略);SEQUENCE:通过序列产生主键,通过SequenceGenerator注解指定序列名(如Oracle的Sequence, MySql不支持这种方式);TABLE:通过表产生主键,使用该策略可以使应用更易于数据库移植。不同的 JPA实现商生成的表名是不同的。三、三、实体实体Annotation 基本注解基本注解 基本注解基本注解EmbeddedId或或IdClass组合关键字Column属性对应的表字段三、三、实体实体Annotation 继承关系继承关系 继承关系:继承关系:对于继承的实体,在 javax.persist

18、ence.InheritanceType定义了3种映射策略SINGLE_TABLE父子类都保存到同一个表中,通过字段值进行区分。JOINED父子类相同的部分保存在同一个表中,不同的部分分开存放,通过表连接获取完整数据。TABLE_PER_CLASS每一个类对应自己的表(一般不推荐采用这种方式)。三、三、实体实体Annotation 关联关系关联关系关联关系关联关系:OneToOne OneToMany ManyToOne ManyToMany 主要内容主要内容JPA概述使用JPA的步骤实体JPA的APIJPQL 四、四、 JPA的的API下面是下面是 EntityManager EntityM

19、anager的一些主要的接口方法的一些主要的接口方法void persistpersist(Object entity)新实体实例将转换为受控状态void remove(remove(Object entity) 删除某个实体对象,也就是删除数据库中某条记录void flushflush() 将受控态的实体数据同步到数据库中T merge(Tmerge(T entity)游离态的实体持久化到数据库中,并转换为受控态的实体T find(Classfind(Class entityClass, Object primaryKey)以主键查询实体对象,entityClass是实体的类,primary

20、Key是主键值四、四、 JPA的的API-修改修改四、四、 JPA的的API-删除删除JPA的生命周期的生命周期 实体的状态实体的状态新建态新建态new 新创建的实体对象,尚未拥有持久化主键,没有和一个持久化上下文关联起来受控态受控态managed 已经拥有持久化主键并和持久化上下文建立了联系游离态游离态detached 拥有持久化主键,但尚未和持久化上下文建立联系删除态删除态removed拥有持久化主键,已经和持久化上下文建立联系,但已经被安排从数据库中删除主要内容主要内容JPA概述使用JPA的步骤实体JPA的APIJPQL 五、五、 JPQL Java Persistence Query

21、Language(Java持久化查询语言)是一种可移植的查询语言,可以被编译成所有主流数据库服务器上的SQLJPQL是面向对象的,通过面向对象而非面向数据库的查询语言查询数据,在Java空间对类和对象进行操作,避免程序的SQL语句紧密耦合使用 javax.persistence.Query接口代表一个查询实例五、五、 JPQL创建创建Query实例实例 通过EntityManager来生成Query实例:EntityManager提供的使用JPQL(或原生SQL)创建Query的方法:五、五、 JPQL使用使用Query接口接口Query接口执行数据查询的部分方法:getSingleResult():单一查询结果getResultList():多个查询结果setParameter:Query setParameter(int position, Object value):通过参数位置号绑定查询

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论