




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、JPA JPA 簡(jiǎn)介簡(jiǎn)介主要內(nèi)容主要內(nèi)容JPA概述使用JPA的步驟實(shí)體JPA的APIJPQL 主要內(nèi)容主要內(nèi)容JPA概述使用JPA的步驟實(shí)體JPA的APIJPQLJPA概述JPA是什么JPA的產(chǎn)生為什么要使用JPAJPA和Hibernate的關(guān)系JPA的供應(yīng)商JPA的實(shí)現(xiàn)JPA的優(yōu)勢(shì)JPA的缺點(diǎn)JPA主要的技術(shù)一、一、JPA概述概述JPA 是什么是什么 Java Persistence API,用于對(duì)象持久化的API是Java EE 5.0 平臺(tái)標(biāo)準(zhǔn)的 ORM ORM 規(guī)范規(guī)范,使得應(yīng)用程序以統(tǒng)一的方式訪(fǎng)問(wèn)持久層一、一、JPA概述概述JPA 是什么是什么 JPA 是是EJB3 Entity B
2、ean,是一套從EJB3.0核心標(biāo)準(zhǔn)中分離出來(lái)的獨(dú)立的標(biāo)準(zhǔn)文檔J2EE 4規(guī)范中最為人所熟悉的用來(lái)處理數(shù)據(jù)持久的Entity Bean,在Java EE5中被推到重來(lái),取而代之的是java開(kāi)發(fā)的通用持久化規(guī)范Java Persistence API 1.0, 其實(shí)就是完全重新定義了的Entity Bean規(guī)范;JPA作為java中負(fù)責(zé)關(guān)系數(shù)據(jù)持久化的組件已經(jīng)完全獨(dú)立出來(lái)成為一個(gè)單獨(dú)的規(guī)范,而不再屬于Enterprise Java Bean的范疇(EJB更多的是指Stateless/Stateful session bean和Message Driven Bean)。使用的 Java 的版本決定
3、了實(shí)際是否可以應(yīng)用 JPA。因?yàn)镴PA 是 EJB 3.0 規(guī)范的一部分,而EJB 3.0 規(guī)范是 Java EE 5 版本的一部分。如果您未更新到 Java EE 5,則無(wú)法使用 JPA。 一、一、JPA概述概述JPA 是什么是什么 提供了以pojo編程模型為持久化對(duì)象的機(jī)制:通過(guò) JDK 5.0 注解或 XML 描述對(duì)象關(guān)系表的映射關(guān)系,并將運(yùn)行期的實(shí)體對(duì)象持久化到數(shù)據(jù)庫(kù)中,下圖描述了 JPA 的結(jié)構(gòu): 一、一、JPA概述概述JPA的產(chǎn)生的產(chǎn)生Sun引入新的引入新的 JPA ORM規(guī)范出于兩個(gè)原因:規(guī)范出于兩個(gè)原因:其一,簡(jiǎn)化現(xiàn)有Java EE和 Java SE應(yīng)用的對(duì)象持久化的開(kāi)發(fā)工作:
4、和實(shí)體Bean相比,不需要配置文件,提供了更好的開(kāi)發(fā)體驗(yàn)不同于 EJB 3.0,JPA并不是J2EE環(huán)境專(zhuān)用,在J2SE的環(huán)境中也可以使用(不依賴(lài)J2EE容器,是java中的通用API)其二,Sun希望整合ORM技術(shù),統(tǒng)一各種ORM框架的規(guī)范,實(shí)現(xiàn)天下歸一。(目前Hibernate 3.2、TopLink 10.1.3以及OpenJpa都提供了JPA的實(shí)現(xiàn))一、一、JPA概述概述為什么要使用為什么要使用JPA一、一、JPA概述概述JPA和和Hibernate的關(guān)系的關(guān)系JPA是hibernate的一個(gè)抽象或者可以理解為接口(就像JDBC和JDBC驅(qū)動(dòng)的關(guān)系):JPA是規(guī)范:JPA本質(zhì)上就是一種
5、ORM規(guī)范,不是ORM框架因?yàn)镴PA并未提供ORM實(shí)現(xiàn),它只是制訂了一些規(guī)范,提供了一些編程的API接口,但具體實(shí)現(xiàn)則由用用服務(wù)器廠(chǎng)商來(lái)提供實(shí)現(xiàn)Hibernate 是實(shí)現(xiàn):Hibernate除了作為ORM框架之外,它也是一種JPA實(shí)現(xiàn)從功能上來(lái)說(shuō), JPA現(xiàn)在就是現(xiàn)在就是Hibernate功能的一個(gè)子集功能的一個(gè)子集一、一、JPA概述概述JPA的供應(yīng)商的供應(yīng)商 JPA 的目標(biāo)之一是制定一個(gè)可以由很多供應(yīng)商實(shí)現(xiàn)的API,目前Hibernate 3.2、TopLink 10.1.3以及OpenJpa都提供了JPA的實(shí)現(xiàn)HibernateJPA的始作俑者就是Hibernate的作者Hibernate
6、 從3.2開(kāi)始,就開(kāi)始兼容JPAOpenJPAOpenJPA 是 Apache 組織提供的開(kāi)源項(xiàng)目TopLinkTopLink以前需要收費(fèi),如今開(kāi)源了;OpenJPA雖然免費(fèi),但功能、性能、普及性等方面更加需要加大力度。一、一、JPA概述概述JPA的實(shí)現(xiàn)的實(shí)現(xiàn)JPA做為Java EE5里面的新成員,跟jdbc一樣就是一接口,具體實(shí)現(xiàn)由服務(wù)器實(shí)現(xiàn)你選擇什么服務(wù)器就基本上決定了用哪個(gè)JPA實(shí)現(xiàn)JBoss就是用hibernate去實(shí)現(xiàn)的weblogic是用OpenJPAOracle是用TopLink一、一、JPA概述概述JPA的的優(yōu)勢(shì)優(yōu)勢(shì)標(biāo)準(zhǔn)化標(biāo)準(zhǔn)化提供相同的訪(fǎng)問(wèn) API,這保證了基于JPA開(kāi)發(fā)的企
7、業(yè)應(yīng)用能夠經(jīng)過(guò)少量的修改就能夠在不同的JPA框架下運(yùn)行。越來(lái)越多的提供商期待在不久的將來(lái)提供 JPA 實(shí)施。 對(duì)容器級(jí)特性的支持對(duì)容器級(jí)特性的支持 JPA 框架中支持大數(shù)據(jù)集、事務(wù)、并發(fā)等容器級(jí)事務(wù)簡(jiǎn)單易用,集成方便簡(jiǎn)單易用,集成方便 JPA的主要目標(biāo)之一就是提供更加簡(jiǎn)單的編程模型,在JPA框架下創(chuàng)建實(shí)體和創(chuàng)建Java 類(lèi)一樣簡(jiǎn)單,只需要使用 javax.persistence.Entity進(jìn)行注釋?zhuān)籎PA的框架和接口也都非常簡(jiǎn)單,可媲美可媲美JDBC的查詢(xún)能力的查詢(xún)能力 JPA的查詢(xún)語(yǔ)言是面向?qū)ο蟮?,JPA定義了獨(dú)特的JPQL,而且能夠支持批量更新和修改、JOIN、GROUP BY、HAVI
8、NG 等通常只有 SQL 才能夠提供的高級(jí)查詢(xún)特性,甚至還能夠支持子查詢(xún)。支持面向?qū)ο蟮母呒?jí)特性支持面向?qū)ο蟮母呒?jí)特性 JPA 中能夠支持面向?qū)ο蟮母呒?jí)特性,如類(lèi)之間的繼承、多態(tài)和類(lèi)之間的復(fù)雜關(guān)系,最大限度的使用面向?qū)ο蟮哪P鸵弧⒁?、JPA概述概述JPA的缺點(diǎn)的缺點(diǎn)由于非常新,JPA 規(guī)范可能還需要進(jìn)過(guò)重要發(fā)展才會(huì)變得很穩(wěn)定。JPA是一個(gè)規(guī)范而不是一個(gè)產(chǎn)品。需要提供商提供一個(gè)實(shí)施,才能獲得這些基于標(biāo)準(zhǔn)的 API 的優(yōu)勢(shì)。JPA是Hibernate、TopLink,JDO等ORM框架真子集,只提供其中最好的功能,如果應(yīng)用程序中需要的功能,但是規(guī)范中沒(méi)有提供的功能,則使用供應(yīng)商特有的API,移植起
9、來(lái)比較麻煩,所以要盡可能地使用JPAAPI。一、一、JPA概述概述JPA包括包括 3方面的技術(shù)方面的技術(shù)ORMORM映射元數(shù)據(jù)映射元數(shù)據(jù):JPA支持XML和 JDK 5.0注解兩種元數(shù)據(jù)的形式,元數(shù)據(jù)描述對(duì)象和表之間的映射關(guān)系,框架據(jù)此將實(shí)體對(duì)象持久化到數(shù)據(jù)庫(kù)表中。 JPAJPA的的APIAPI:用來(lái)操作實(shí)體對(duì)象,執(zhí)行CRUD操作,框架在后臺(tái)替我們完成所有的事情,開(kāi)發(fā)者從繁瑣的 JDBC和 SQL代碼中解脫出來(lái)。 查詢(xún)語(yǔ)言查詢(xún)語(yǔ)言:這是持久化操作中很重要的一個(gè)方面,通過(guò)面向?qū)ο蠖敲嫦驍?shù)據(jù)庫(kù)的查詢(xún)語(yǔ)言查詢(xún)數(shù)據(jù),避免程序的 SQL語(yǔ)句緊密耦合。主要內(nèi)容主要內(nèi)容JPA概述使用JPA的步驟實(shí)體JPA
10、的APIJPQL二、二、使用使用JPA持久化對(duì)象的步驟持久化對(duì)象的步驟創(chuàng)建persistence.xml,在這個(gè)文件中配置持久化單元(Hibernate中的hibernate.cfg.xml);需要指定跟哪個(gè)數(shù)據(jù)庫(kù)進(jìn)行交互;需要指定JPA使用哪個(gè)持久化的框架;(因?yàn)樗旧頉](méi)有持久化能力);創(chuàng)建EntityManagerFactory(Hibernate中的SessionFactory);創(chuàng)建EntityManager(實(shí)體管理器)(Hibernate中的Session);創(chuàng)建實(shí)體類(lèi),使用annotation來(lái)描述實(shí)體類(lèi)跟數(shù)據(jù)庫(kù)表之間的一一映射關(guān)系.使用JPA API完成數(shù)據(jù)增加、刪除、修改和查
11、詢(xún)操作JPA的執(zhí)行過(guò)程的執(zhí)行過(guò)程 persistence.xml持久化單元持久化單元持久化單元持久化單元 :persistence-unit數(shù)據(jù)庫(kù)相關(guān)的信息持久化提供者信息(Hibernate、Toplink)廠(chǎng)商的一些客戶(hù)化屬性其他可選的一些元數(shù)據(jù)如果使用不同的持久化提供程序,那么需要指定提供程序類(lèi)附加的ORM映射文件 附加的ORM映射文件附加實(shí)體的JAR文件一個(gè)持久化單元可以創(chuàng)建一個(gè)一個(gè)持久化單元可以創(chuàng)建一個(gè)EntityManagerFactory持久化提供者持久化提供者Persistence Provider:持久化提供者持久化提供者JPA只是一套標(biāo)準(zhǔn)的持久化API,它需要通過(guò)一個(gè)ORM
12、框架,才能進(jìn)行持久化,我們把這個(gè)能和JPA集成起來(lái)的ORM框架稱(chēng)為持久化的提供者;每一個(gè)支持ebj3.0 JPA的ORM框架必須提供一個(gè)實(shí)現(xiàn)javax.persistence.spi.PersistenceProvider接口的實(shí)現(xiàn)類(lèi),通過(guò)它創(chuàng)建EntityManager對(duì)象使用使用JPA實(shí)現(xiàn)增加、刪除、修改和查詢(xún)操作實(shí)現(xiàn)增加、刪除、修改和查詢(xún)操作EntityManagerFactory實(shí)體管理器的工廠(chǎng),類(lèi)似于Hibernate 中的SessionFactory通過(guò)持久化提供者Persistence Provider創(chuàng)建這個(gè)對(duì)象應(yīng)用程序管理用來(lái)創(chuàng)建EntityManager實(shí)例一個(gè)數(shù)據(jù)庫(kù)創(chuàng)建一
13、個(gè)EntityManagerFactory對(duì)象EntityManager實(shí)體管理器,類(lèi)似于Hibernate的Session由EntityManagerFacotry創(chuàng)建用來(lái)訪(fǎng)問(wèn)持久化上下文中實(shí)體對(duì)象的一個(gè)接口,管理實(shí)體對(duì)象與底層數(shù)據(jù)源之間進(jìn)行O/R映射,包括增刪改查一個(gè)線(xiàn)程一個(gè)EntityManager對(duì)象,EntityManager獲取EntityManager對(duì)象的方式應(yīng)用程序管理EntityManager應(yīng)用程序通過(guò)javax.persistence.EntityManagerFactory的createEntityManager創(chuàng)建EntityManager實(shí)例容器管理EntityM
14、anager通過(guò)依賴(lài)注入獲取Persistence Context:持久化上下文持久化上下文其實(shí)就是JPA的一級(jí)緩存是一系列實(shí)體的管理環(huán)境,實(shí)體對(duì)象集合被EntityManager管理著的,通過(guò)EntityManager和持久化上下文進(jìn)行交互。持久化上下文類(lèi)型 應(yīng)用程序管理應(yīng)用程序來(lái)管理所需資源持久化上下文是綁定到當(dāng)前EntityManager 容器管理,又分為兩種:和事務(wù)范圍相關(guān)持久化上下文事務(wù)啟動(dòng)就會(huì)創(chuàng)建,事務(wù)結(jié)束也會(huì)結(jié)束;在無(wú)狀態(tài)session bean中使用;擴(kuò)展的持久化上下文和有狀態(tài)session bean結(jié)合使用,它的生命周期和事務(wù)無(wú)關(guān);當(dāng)Session bean對(duì)象創(chuàng)建,持久化上
15、下文就創(chuàng)建;當(dāng)Session bean對(duì)象銷(xiāo)毀,持久化上下文就結(jié)束JPA的使用步驟的使用步驟JPA的使用步驟的使用步驟JPA的使用步驟的使用步驟主要內(nèi)容主要內(nèi)容JPA概述使用JPA的步驟實(shí)體JPA的APIJPQL三、三、實(shí)體實(shí)體三、三、實(shí)體實(shí)體三、三、實(shí)體實(shí)體三、三、實(shí)體實(shí)體三、三、實(shí)體實(shí)體實(shí)體的定義實(shí)體的定義 實(shí)體具備以下的條件:必須使用 javax.persistence.Entity注解或者在 XML映射文件中有對(duì)應(yīng)的元素; 必須具有一個(gè)不帶參的構(gòu)造函數(shù),類(lèi)不能聲明為final,方法和需要持久化的屬性也不能聲明為 final; 如果游離狀的實(shí)體對(duì)象需要以值的方式進(jìn)行傳遞,如通Sessio
16、n bean的遠(yuǎn)程業(yè)務(wù)接口傳遞,則必須實(shí)現(xiàn) Serializable接口; 需要持久化的屬性,其訪(fǎng)問(wèn)修飾符不能是public,它們必須通過(guò)實(shí)體類(lèi)方法進(jìn)行訪(fǎng)問(wèn)。三、三、實(shí)體實(shí)體Annotation 基本注解基本注解 基本注解基本注解Entity將對(duì)象標(biāo)注為一個(gè)實(shí)體,表示需要保存到數(shù)據(jù)庫(kù)中默認(rèn)情況下類(lèi)名即為表名,通過(guò)name屬性顯式指定表名Id對(duì)應(yīng)的屬性是表的主鍵GeneratedValue主鍵的產(chǎn)生策略,通過(guò)strategy屬性指定;默認(rèn)情況下,JPA自動(dòng)選擇一個(gè)最適合底層數(shù)據(jù)庫(kù)的主鍵生成策略可供選擇的策略IDENTITY:表自增鍵字段(SqlServer對(duì)應(yīng)策略,Oracle不支持這種方式)A
17、UTO: JPA自動(dòng)選擇合適的策略,是默認(rèn)選項(xiàng)(MySql對(duì)應(yīng)策略);SEQUENCE:通過(guò)序列產(chǎn)生主鍵,通過(guò)SequenceGenerator注解指定序列名(如Oracle的Sequence, MySql不支持這種方式);TABLE:通過(guò)表產(chǎn)生主鍵,使用該策略可以使應(yīng)用更易于數(shù)據(jù)庫(kù)移植。不同的 JPA實(shí)現(xiàn)商生成的表名是不同的。三、三、實(shí)體實(shí)體Annotation 基本注解基本注解 基本注解基本注解EmbeddedId或或IdClass組合關(guān)鍵字Column屬性對(duì)應(yīng)的表字段三、三、實(shí)體實(shí)體Annotation 繼承關(guān)系繼承關(guān)系 繼承關(guān)系:繼承關(guān)系:對(duì)于繼承的實(shí)體,在 javax.persist
18、ence.InheritanceType定義了3種映射策略SINGLE_TABLE父子類(lèi)都保存到同一個(gè)表中,通過(guò)字段值進(jìn)行區(qū)分。JOINED父子類(lèi)相同的部分保存在同一個(gè)表中,不同的部分分開(kāi)存放,通過(guò)表連接獲取完整數(shù)據(jù)。TABLE_PER_CLASS每一個(gè)類(lèi)對(duì)應(yīng)自己的表(一般不推薦采用這種方式)。三、三、實(shí)體實(shí)體Annotation 關(guān)聯(lián)關(guān)系關(guān)聯(lián)關(guān)系關(guān)聯(lián)關(guān)系關(guān)聯(lián)關(guān)系:OneToOne OneToMany ManyToOne ManyToMany 主要內(nèi)容主要內(nèi)容JPA概述使用JPA的步驟實(shí)體JPA的APIJPQL 四、四、 JPA的的API下面是下面是 EntityManager EntityM
19、anager的一些主要的接口方法的一些主要的接口方法void persistpersist(Object entity)新實(shí)體實(shí)例將轉(zhuǎn)換為受控狀態(tài)void remove(remove(Object entity) 刪除某個(gè)實(shí)體對(duì)象,也就是刪除數(shù)據(jù)庫(kù)中某條記錄void flushflush() 將受控態(tài)的實(shí)體數(shù)據(jù)同步到數(shù)據(jù)庫(kù)中T merge(Tmerge(T entity)游離態(tài)的實(shí)體持久化到數(shù)據(jù)庫(kù)中,并轉(zhuǎn)換為受控態(tài)的實(shí)體T find(Classfind(Class entityClass, Object primaryKey)以主鍵查詢(xún)實(shí)體對(duì)象,entityClass是實(shí)體的類(lèi),primary
20、Key是主鍵值四、四、 JPA的的API-修改修改四、四、 JPA的的API-刪除刪除JPA的生命周期的生命周期 實(shí)體的狀態(tài)實(shí)體的狀態(tài)新建態(tài)新建態(tài)new 新創(chuàng)建的實(shí)體對(duì)象,尚未擁有持久化主鍵,沒(méi)有和一個(gè)持久化上下文關(guān)聯(lián)起來(lái)受控態(tài)受控態(tài)managed 已經(jīng)擁有持久化主鍵并和持久化上下文建立了聯(lián)系游離態(tài)游離態(tài)detached 擁有持久化主鍵,但尚未和持久化上下文建立聯(lián)系刪除態(tài)刪除態(tài)removed擁有持久化主鍵,已經(jīng)和持久化上下文建立聯(lián)系,但已經(jīng)被安排從數(shù)據(jù)庫(kù)中刪除主要內(nèi)容主要內(nèi)容JPA概述使用JPA的步驟實(shí)體JPA的APIJPQL 五、五、 JPQL Java Persistence Query
21、Language(Java持久化查詢(xún)語(yǔ)言)是一種可移植的查詢(xún)語(yǔ)言,可以被編譯成所有主流數(shù)據(jù)庫(kù)服務(wù)器上的SQLJPQL是面向?qū)ο蟮模ㄟ^(guò)面向?qū)ο蠖敲嫦驍?shù)據(jù)庫(kù)的查詢(xún)語(yǔ)言查詢(xún)數(shù)據(jù),在Java空間對(duì)類(lèi)和對(duì)象進(jìn)行操作,避免程序的SQL語(yǔ)句緊密耦合使用 javax.persistence.Query接口代表一個(gè)查詢(xún)實(shí)例五、五、 JPQL創(chuàng)建創(chuàng)建Query實(shí)例實(shí)例 通過(guò)EntityManager來(lái)生成Query實(shí)例:EntityManager提供的使用JPQL(或原生SQL)創(chuàng)建Query的方法:五、五、 JPQL使用使用Query接口接口Query接口執(zhí)行數(shù)據(jù)查詢(xún)的部分方法:getSingleResult():?jiǎn)我徊樵?xún)結(jié)果getResultList():多個(gè)查詢(xún)結(jié)果setParameter:Query setParameter(int position, Object value):通過(guò)參數(shù)位置號(hào)綁定查詢(xún)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 杭州快遞員工活動(dòng)方案
- 服裝生意活動(dòng)方案
- 晚會(huì)學(xué)?;顒?dòng)方案
- 朝鮮早教活動(dòng)方案
- 智能家電活動(dòng)方案
- 暑期游樂(lè)活動(dòng)方案
- 月底特價(jià)促銷(xiāo)活動(dòng)方案
- 暑期大型軍訓(xùn)活動(dòng)方案
- 機(jī)車(chē)街舞活動(dòng)方案
- 枕頭團(tuán)建活動(dòng)方案
- 人工智能創(chuàng)業(yè)項(xiàng)目計(jì)劃書(shū)
- (正式版)JBT 106-2024 閥門(mén)的標(biāo)志和涂裝
- 肺結(jié)節(jié)手術(shù)的術(shù)后護(hù)理措施
- 萬(wàn)豪集團(tuán)員工手冊(cè)
- 美育浸潤(rùn)行動(dòng)總結(jié)匯報(bào)
- 2023年貴州公務(wù)員考試申論試題(A卷)含解析
- 膽道梗阻的護(hù)理查房
- 部編版語(yǔ)文八年級(jí)下冊(cè)典型作文及例析
- 15D502 等電位聯(lián)結(jié)安裝
- 《企業(yè)信息管理》2023期末試題及答案
- 絕緣靴絕緣手套試驗(yàn)機(jī)技術(shù)規(guī)范書(shū)
評(píng)論
0/150
提交評(píng)論