最新JPA从入门到精通

上传人:仙*** 文档编号:47417103 上传时间:2021-12-20 格式:PPT 页数:58 大小:2.97MB
收藏 版权申诉 举报 下载
最新JPA从入门到精通_第1页
第1页 / 共58页
最新JPA从入门到精通_第2页
第2页 / 共58页
最新JPA从入门到精通_第3页
第3页 / 共58页
资源描述:

《最新JPA从入门到精通》由会员分享,可在线阅读,更多相关《最新JPA从入门到精通(58页珍藏版)》请在装配图网上搜索。

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

2、A 是是EJB3 Entity Bean,是一套从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 Bea

3、n)。使用的 Java 的版本决定了实际是否可以应用 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

4、 SE应用的对象持久化的开发工作:和实体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驱动的关系

5、):JPA是规范:JPA本质上就是一种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的始作俑者就是

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

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

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

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

10、语句紧密耦合。主要内容主要内容 JPA概述 使用JPA的步骤 实体 JPA的API JPQL二、使用二、使用JPA持久化对象的步骤持久化对象的步骤 创建persistence.xml,在这个文件中配置持久化单元(Hibernate中的hibernate.cfg.xml);需要指定跟哪个数据库进行交互;需要指定JPA使用哪个持久化的框架;(因为他本身没有持久化能力); 创建EntityManagerFactory(Hibernate中的SessionFactory); 创建EntityManager(实体管理器)(Hibernate中的Session); 创建实体类,使用annotation来描

11、述实体类跟数据库表之间的一一映射关系. 使用JPA API完成数据增加、删除、修改和查询操作JPA的执行过程的执行过程 persistence.xml持久化单元持久化单元 持久化单元持久化单元 :persistence-unit数据库相关的信息持久化提供者信息(Hibernate、Toplink)厂商的一些客户化属性其他可选的一些元数据 如果使用不同的持久化提供程序,那么需要指定提供程序类 附加的ORM映射文件 附加的ORM映射文件 附加实体的JAR文件 一个持久化单元可以创建一个一个持久化单元可以创建一个EntityManagerFactory持久化提供者持久化提供者 Persistence

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

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

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

15、an中使用;扩展的持久化上下文和有状态session bean结合使用,它的生命周期和事务无关;当Session bean对象创建,持久化上下文就创建;当Session bean对象销毁,持久化上下文就结束JPA的使用步骤的使用步骤JPA的使用步骤的使用步骤JPA的使用步骤的使用步骤主要内容主要内容 JPA概述 使用JPA的步骤 实体 JPA的API JPQL三、实体三、实体三、实体三、实体三、实体三、实体三、实体三、实体三、实体三、实体实体的定义实体的定义 实体具备以下的条件: 必须使用 javax.persistence.Entity注解或者在 XML映射文件中有对应的元素; 必须具有一个

16、不带参的构造函数,类不能声明为final,方法和需要持久化的属性也不能声明为 final; 如果游离状的实体对象需要以值的方式进行传递,如通Session bean的远程业务接口传递,则必须实现 Serializable接口; 需要持久化的属性,其访问修饰符不能是public,它们必须通过实体类方法进行访问。三、实体三、实体Annotation 基本注解基本注解 基本注解基本注解 Entity将对象标注为一个实体,表示需要保存到数据库中默认情况下类名即为表名,通过name属性显式指定表名 Id对应的属性是表的主键 GeneratedValue主键的产生策略,通过strategy属性指定;默认情

17、况下,JPA自动选择一个最适合底层数据库的主键生成策略可供选择的策略 IDENTITY:表自增键字段(SqlServer对应策略,Oracle不支持这种方式) AUTO: JPA自动选择合适的策略,是默认选项(MySql对应策略); SEQUENCE:通过序列产生主键,通过SequenceGenerator注解指定序列名(如Oracle的Sequence, MySql不支持这种方式); TABLE:通过表产生主键,使用该策略可以使应用更易于数据库移植。不同的 JPA实现商生成的表名是不同的。三、实体三、实体Annotation 基本注解基本注解 基本注解基本注解 EmbeddedId或或IdC

18、lass组合关键字 Column属性对应的表字段三、实体三、实体Annotation 继承关系继承关系 继承关系:继承关系:对于继承的实体,在 javax.persistence.InheritanceType定义了3种映射策略 SINGLE_TABLE父子类都保存到同一个表中,通过字段值进行区分。 JOINED父子类相同的部分保存在同一个表中,不同的部分分开存放,通过表连接获取完整数据。 TABLE_PER_CLASS每一个类对应自己的表(一般不推荐采用这种方式)。三、实体三、实体Annotation 关联关系关联关系关联关系:关联关系: OneToOne OneToMany ManyToO

19、ne ManyToMany 主要内容主要内容 JPA概述 使用JPA的步骤 实体 JPA的API JPQL 四、四、 JPA的的API下面是下面是 EntityManagerEntityManager的一些主要的接口方法的一些主要的接口方法 void persistpersist(Object entity)新实体实例将转换为受控状态 void remove(remove(Object entity) 删除某个实体对象,也就是删除数据库中某条记录 void flushflush() 将受控态的实体数据同步到数据库中 T merge(Tmerge(T entity)游离态的实体持久化到数据库中,

20、并转换为受控态的实体 T find(Classfind(Class entityClass, Object primaryKey)以主键查询实体对象,entityClass是实体的类,primaryKey是主键值四、四、 JPA的的API-修改修改四、四、 JPA的的API-删除删除JPA的生命周期的生命周期 实体的状态实体的状态 新建态新建态new 新创建的实体对象,尚未拥有持久化主键,没有和一个持久化上下文关联起来 受控态受控态managed 已经拥有持久化主键并和持久化上下文建立了联系 游离态游离态detached 拥有持久化主键,但尚未和持久化上下文建立联系 删除态删除态removed

21、拥有持久化主键,已经和持久化上下文建立联系,但已经被安排从数据库中删除主要内容主要内容 JPA概述 使用JPA的步骤 实体 JPA的API JPQL 五、五、 JPQL Java Persistence Query Language(Java持久化查询语言) 是一种可移植的查询语言,可以被编译成所有主流数据库服务器上的SQL JPQL是面向对象的,通过面向对象而非面向数据库的查询语言查询数据,在Java空间对类和对象进行操作,避免程序的SQL语句紧密耦合 使用 javax.persistence.Query接口代表一个查询实例五、五、 JPQL创建创建Query实例实例 通过EntityMan

22、ager来生成Query实例:EntityManager提供的使用JPQL(或原生SQL)创建Query的方法:五、五、 JPQL使用使用Query接口接口Query接口执行数据查询的部分方法: getSingleResult():单一查询结果 getResultList():多个查询结果 setParameter:Query setParameter(int position, Object value):通过参数位置号绑定查询语句中的参数Query setParameter(String name, Object value):绑定命名参数 setMaxResults:设置返回的最大结果数

23、 executeUpdate:新增、删除或更改的语句,通过该方法执行QueryQuery五、五、 JPQL JPQL支持三种语句类型,可以在查询中使用JPQL执行选择、更新、删除操作: 定义和使用Select:五、五、 JPQL-条件表达式和操作条件表达式和操作五、五、 JPQL-使用使用JPQL函数函数 字符串函数五、五、 JPQL-使用使用JPQL函数函数 算术函数 时间函数五、五、 JPQL-投影投影五、五、 JPQL 使用聚合:聚合函数:AVG、COUNT、MAX、MIN和SUM通过GROUP BY和HAVING分组 排序:ORDER BY 使用子查询可以在WHERE和HAVING子句

24、中使用子查询,EJB3.1的FROM子句中不支持;可以在子查询中使用IN、EXISTS、ALL、ANY和SOME 联接实体关联联结:INNER JOIN外联结:LEFT JOIN或LEFT OUTER JOIN获取联结:JOIN FETCH五、五、 JPQL- Update和和Delete 大数据量的更新、删除,可以用 EntityManager进行实体的更新操作,也可以通过查询语言执行数据表的字段更新,记录删除的操作UPDATE PollOption p SET p.optionItem = :value WHERE p.optionId = :optionId DELETE FROM PollOption p WHERE p.optionId = :optioned

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!