版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
JPA簡(jiǎn)介
主要內(nèi)容JPA概述使用JPA的步驟實(shí)體JPA的APIJPQL主要內(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是什么JavaPersistenceAPI,用于對(duì)象持久化的API是JavaEE5.0平臺(tái)標(biāo)準(zhǔn)的
ORM規(guī)范,使得應(yīng)用程序以統(tǒng)一的方式訪問(wèn)持久層一、JPA概述—JPA是什么JPA是EJB3EntityBean,是一套從EJB3.0核心標(biāo)準(zhǔn)中分離出來(lái)的獨(dú)立的標(biāo)準(zhǔn)文檔J2EE4規(guī)范中最為人所熟悉的用來(lái)處理數(shù)據(jù)持久的EntityBean,
在JavaEE5中被推到重來(lái),取而代之的是java開(kāi)發(fā)的通用持久化規(guī)范JavaPersistenceAPI1.0,其實(shí)就是完全重新定義了的EntityBean規(guī)范;JPA作為java中負(fù)責(zé)關(guān)系數(shù)據(jù)持久化的組件已經(jīng)完全獨(dú)立出來(lái)成為一個(gè)單獨(dú)的規(guī)范,而不再屬于EnterpriseJavaBean的范疇
(EJB更多的是指Stateless/Statefulsessionbean和MessageDrivenBean)。使用的Java的版本決定了實(shí)際是否可以應(yīng)用JPA。
因?yàn)镴PA是EJB3.0規(guī)范的一部分,而EJB3.0規(guī)范是JavaEE5版本的一部分。如果您未更新到JavaEE5,則無(wú)法使用JPA。
一、JPA概述—JPA是什么提供了以pojo編程模型為持久化對(duì)象的機(jī)制:通過(guò)JDK5.0注解或XML描述對(duì)象-關(guān)系表的映射關(guān)系,并將運(yùn)行期的實(shí)體對(duì)象持久化到數(shù)據(jù)庫(kù)中,下圖描述了JPA的結(jié)構(gòu):
一、JPA概述—JPA的產(chǎn)生Sun引入新的JPAORM規(guī)范出于兩個(gè)原因:其一,簡(jiǎn)化現(xiàn)有JavaEE和JavaSE應(yīng)用的對(duì)象持久化的開(kāi)發(fā)工作:和實(shí)體Bean相比,不需要配置文件,提供了更好的開(kāi)發(fā)體驗(yàn)不同于EJB3.0,JPA并不是J2EE環(huán)境專用,在J2SE的環(huán)境中也可以使用(不依賴J2EE容器,是java中的通用API)其二,Sun希望整合ORM技術(shù),統(tǒng)一各種ORM框架的規(guī)范,實(shí)現(xiàn)天下歸一。
(目前Hibernate3.2、TopLink10.1.3以及OpenJpa都提供了JPA的實(shí)現(xiàn))一、JPA概述—為什么要使用JPA一、JPA概述—JPA和Hibernate的關(guān)系JPA是hibernate的一個(gè)抽象或者可以理解為接口(就像JDBC和JDBC驅(qū)動(dòng)的關(guān)系):JPA是規(guī)范:JPA本質(zhì)上就是一種ORM規(guī)范,不是ORM框架——因?yàn)镴PA并未提供ORM實(shí)現(xiàn),它只是制訂了一些規(guī)范,提供了一些編程的API接口,但具體實(shí)現(xiàn)則由用用服務(wù)器廠商來(lái)提供實(shí)現(xiàn)Hibernate是實(shí)現(xiàn):Hibernate除了作為ORM框架之外,它也是一種JPA實(shí)現(xiàn)從功能上來(lái)說(shuō),JPA現(xiàn)在就是Hibernate功能的一個(gè)子集一、JPA概述—JPA的供應(yīng)商
JPA的目標(biāo)之一是制定一個(gè)可以由很多供應(yīng)商實(shí)現(xiàn)的API,目前Hibernate3.2、TopLink10.1.3以及OpenJpa都提供了JPA的實(shí)現(xiàn)HibernateJPA的始作俑者就是Hibernate的作者Hibernate從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)JPA做為JavaEE5里面的新成員,跟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ì)標(biāo)準(zhǔn)化提供相同的訪問(wèn)API,這保證了基于JPA開(kāi)發(fā)的企業(yè)應(yīng)用能夠經(jīng)過(guò)少量的修改就能夠在不同的JPA框架下運(yùn)行。越來(lái)越多的提供商期待在不久的將來(lái)提供JPA實(shí)施。對(duì)容器級(jí)特性的支持
JPA框架中支持大數(shù)據(jù)集、事務(wù)、并發(fā)等容器級(jí)事務(wù)簡(jiǎn)單易用,集成方便
JPA的主要目標(biāo)之一就是提供更加簡(jiǎn)單的編程模型,在JPA框架下創(chuàng)建實(shí)體和創(chuàng)建Java類一樣簡(jiǎn)單,只需要使用javax.persistence.Entity進(jìn)行注釋;JPA的框架和接口也都非常簡(jiǎn)單,可媲美JDBC的查詢能力
JPA的查詢語(yǔ)言是面向?qū)ο蟮模琂PA定義了獨(dú)特的JPQL,而且能夠支持批量更新和修改、JOIN、GROUPBY、HAVING等通常只有SQL才能夠提供的高級(jí)查詢特性,甚至還能夠支持子查詢。支持面向?qū)ο蟮母呒?jí)特性
JPA中能夠支持面向?qū)ο蟮母呒?jí)特性,如類之間的繼承、多態(tài)和類之間的復(fù)雜關(guān)系,最大限度的使用面向?qū)ο蟮哪P鸵弧PA概述—JPA的缺點(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,移植起來(lái)比較麻煩,所以要盡可能地使用JPAAPI。一、JPA概述—JPA包括3方面的技術(shù)ORM映射元數(shù)據(jù):JPA支持XML和JDK5.0注解兩種元數(shù)據(jù)的形式,元數(shù)據(jù)描述對(duì)象和表之間的映射關(guān)系,框架據(jù)此將實(shí)體對(duì)象持久化到數(shù)據(jù)庫(kù)表中。
JPA的API:用來(lái)操作實(shí)體對(duì)象,執(zhí)行CRUD操作,框架在后臺(tái)替我們完成所有的事情,開(kāi)發(fā)者從繁瑣的JDBC和SQL代碼中解脫出來(lái)。
查詢語(yǔ)言:這是持久化操作中很重要的一個(gè)方面,通過(guò)面向?qū)ο蠖敲嫦驍?shù)據(jù)庫(kù)的查詢語(yǔ)言查詢數(shù)據(jù),避免程序的SQL語(yǔ)句緊密耦合。主要內(nèi)容JPA概述使用JPA的步驟實(shí)體JPA的APIJPQL二、使用JPA持久化對(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í)體類,使用annotation來(lái)描述實(shí)體類跟數(shù)據(jù)庫(kù)表之間的一一映射關(guān)系.使用JPAAPI完成數(shù)據(jù)增加、刪除、修改和查詢操作JPA的執(zhí)行過(guò)程persistence.xml持久化單元持久化單元
:persistence-unit數(shù)據(jù)庫(kù)相關(guān)的信息持久化提供者信息(Hibernate、Toplink…)廠商的一些客戶化屬性
<propertyname="hibernate.show_sql"value="true"/>其他可選的一些元數(shù)據(jù)如果使用不同的持久化提供程序,那么需要指定提供程序類附加的ORM映射文件附加的ORM映射文件附加實(shí)體的JAR文件一個(gè)持久化單元可以創(chuàng)建一個(gè)EntityManagerFactory持久化提供者PersistenceProvider:持久化提供者JPA只是一套標(biāo)準(zhǔn)的持久化API,它需要通過(guò)一個(gè)ORM框架,才能進(jìn)行持久化,我們把這個(gè)能和JPA集成起來(lái)的ORM框架稱為持久化的提供者;每一個(gè)支持ebj3.0JPA的ORM框架必須提供一個(gè)實(shí)現(xiàn)javax.persistence.spi.PersistenceProvider接口的實(shí)現(xiàn)類,通過(guò)它創(chuàng)建EntityManager對(duì)象使用JPA實(shí)現(xiàn)增加、刪除、修改和查詢操作EntityManagerFactory實(shí)體管理器的工廠,類似于Hibernate中的SessionFactory通過(guò)持久化提供者PersistenceProvider創(chuàng)建這個(gè)對(duì)象應(yīng)用程序管理用來(lái)創(chuàng)建EntityManager實(shí)例一個(gè)數(shù)據(jù)庫(kù)創(chuàng)建一個(gè)EntityManagerFactory對(duì)象EntityManager實(shí)體管理器,類似于Hibernate的Session由EntityManagerFacotry創(chuàng)建用來(lái)訪問(wèn)持久化上下文中實(shí)體對(duì)象的一個(gè)接口,管理實(shí)體對(duì)象與底層數(shù)據(jù)源之間進(jìn)行O/R映射,包括增刪改查一個(gè)線程一個(gè)EntityManager對(duì)象,EntityManager獲取EntityManager對(duì)象的方式應(yīng)用程序管理EntityManager應(yīng)用程序通過(guò)javax.persistence.EntityManagerFactory的createEntityManager創(chuàng)建EntityManager實(shí)例容器管理EntityManager通過(guò)依賴注入獲取PersistenceContext:持久化上下文其實(shí)就是JPA的一級(jí)緩存是一系列實(shí)體的管理環(huán)境,實(shí)體對(duì)象集合被EntityManager管理著的,通過(guò)EntityManager和持久化上下文進(jìn)行交互。持久化上下文類型應(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)sessionbean中使用;擴(kuò)展的持久化上下文和有狀態(tài)sessionbean結(jié)合使用,它的生命周期和事務(wù)無(wú)關(guān);當(dāng)Sessionbean對(duì)象創(chuàng)建,持久化上下文就創(chuàng)建;
當(dāng)Sessionbean對(duì)象銷毀,持久化上下文就結(jié)束JPA的使用步驟JPA的使用步驟JPA的使用步驟主要內(nèi)容JPA概述使用JPA的步驟實(shí)體JPA的APIJPQL三、實(shí)體三、實(shí)體三、實(shí)體三、實(shí)體三、實(shí)體—實(shí)體的定義
實(shí)體具備以下的條件:必須使用javax.persistence.Entity注解或者在XML映射文件中有對(duì)應(yīng)的元素;
必須具有一個(gè)不帶參的構(gòu)造函數(shù),
類不能聲明為final,
方法和需要持久化的屬性也不能聲明為final;
如果游離狀的實(shí)體對(duì)象需要以值的方式進(jìn)行傳遞,如通Sessionbean的遠(yuǎn)程業(yè)務(wù)接口傳遞,則必須實(shí)現(xiàn)Serializable接口;
需要持久化的屬性,其訪問(wèn)修飾符不能是public,它們必須通過(guò)實(shí)體類方法進(jìn)行訪問(wèn)。三、實(shí)體—Annotation—基本注解
基本注解@Entity將對(duì)象標(biāo)注為一個(gè)實(shí)體,表示需要保存到數(shù)據(jù)庫(kù)中默認(rèn)情況下類名即為表名,通過(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不支持這種方式)AUTO: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í)體—Annotation—基本注解
基本注解@EmbeddedId或@IdClass組合關(guān)鍵字@Column屬性對(duì)應(yīng)的表字段三、實(shí)體—Annotation—繼承關(guān)系
繼承關(guān)系:
對(duì)于繼承的實(shí)體,在javax.persistence.InheritanceType定義了3種映射策略SINGLE_TABLE
父子類都保存到同一個(gè)表中,通過(guò)字段值進(jìn)行區(qū)分。
JOINED
父子類相同的部分保存在同一個(gè)表中,不同的部分分開(kāi)存放,通過(guò)表連接獲取完整數(shù)據(jù)。TABLE_PER_CLASS
每一個(gè)類對(duì)應(yīng)自己的表(一般不推薦采用這種方式)。三、實(shí)體—Annotation—關(guān)聯(lián)關(guān)系關(guān)聯(lián)關(guān)系:
@OneToOne
@OneToMany
@ManyToOne@ManyToMany
主要內(nèi)容JPA概述使用JPA的步驟實(shí)體JPA的APIJPQL四、JPA的API下面是EntityManager的一些主要的接口方法voidpersist(Objectentity)新實(shí)體實(shí)例將轉(zhuǎn)換為受控狀態(tài)voidremove(Objectentity)刪除某個(gè)實(shí)體對(duì)象,也就是刪除數(shù)據(jù)庫(kù)中某條記錄voidflush()將受控態(tài)的實(shí)體數(shù)據(jù)同步到數(shù)據(jù)庫(kù)中Tmerge(Tentity)游離態(tài)的實(shí)體持久化到數(shù)據(jù)庫(kù)中,并轉(zhuǎn)換為受控態(tài)的實(shí)體Tfind(ClassentityClass,ObjectprimaryKey)以主鍵查詢實(shí)體對(duì)象,entityClass是實(shí)體的類,primaryKey是主鍵值四、JPA的API--修改四、JPA的API--刪除JPA的生命周期
實(shí)體的狀態(tài)新建態(tài)new
新創(chuàng)建的實(shí)體對(duì)象,尚未擁有持久化主鍵,沒(méi)有和一個(gè)持久化上下文關(guān)聯(lián)起來(lái)受控態(tài)managed
已經(jīng)擁有持久化主鍵并和持久化上下文建立了聯(lián)系游離態(tài)detached
擁有持久化主鍵,但尚未和持久化上下文建立聯(lián)系刪除態(tài)removed擁有持久化主鍵,已經(jīng)和持久化上下文建立聯(lián)系,但已經(jīng)被安排從數(shù)據(jù)庫(kù)中刪除主要內(nèi)容JPA概述使用JPA的步驟實(shí)體JPA的APIJPQL五、
JPQL
JavaPersistenceQueryLanguage(Java持久化查詢語(yǔ)言)是一種可移植的查詢語(yǔ)言,可以被編譯成所有主流數(shù)據(jù)庫(kù)服務(wù)器上的SQLJPQL是面向?qū)ο蟮?,通過(guò)面向?qū)ο蠖敲嫦驍?shù)據(jù)庫(kù)的查詢語(yǔ)言查詢數(shù)據(jù),在Java空間對(duì)類和對(duì)象進(jìn)行操作,避免程序的SQL語(yǔ)句緊密耦合使用javax.persistence.Query接口代表一個(gè)查詢實(shí)例五、
JPQL—?jiǎng)?chuàng)建Query實(shí)例
通過(guò)EntityManager來(lái)生成Query實(shí)例:
EntityManager提供的使用JPQL(或原生SQL)創(chuàng)建Query的方法:五、
JPQL—使用Query接口Query接口執(zhí)行數(shù)據(jù)查詢的部分方法:getSingleResult():?jiǎn)我徊樵兘Y(jié)果getResultList():多個(gè)查詢結(jié)果setParameter:QuerysetParameter(intposition,Objectvalue):通過(guò)參數(shù)位置號(hào)綁定查詢語(yǔ)句中的參數(shù)Quer
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/T 44463-2024互聯(lián)網(wǎng)數(shù)據(jù)中心(IDC)總體技術(shù)要求
- GB/T 3516-2024橡膠溶劑抽出物的測(cè)定
- GB/T 19274-2024土工合成材料塑料土工格室
- 2024年度云南省高校教師資格證之高等教育法規(guī)過(guò)關(guān)檢測(cè)試卷A卷附答案
- 數(shù)據(jù)中心運(yùn)營(yíng)管理方案
- 2024年碳化硅磨塊項(xiàng)目投資申請(qǐng)報(bào)告代可行性研究報(bào)告
- 贛南師范大學(xué)《化工制圖》2023-2024學(xué)年第一學(xué)期期末試卷
- 航道疏浚勞務(wù)分包工程方案(技術(shù)方案)(兩套)
- 阜陽(yáng)師范大學(xué)《物流管理專業(yè)導(dǎo)論》2021-2022學(xué)年第一學(xué)期期末試卷
- 阜陽(yáng)師范大學(xué)《編譯原理》2021-2022學(xué)年第一學(xué)期期末試卷
- 2024年認(rèn)證行業(yè)法律法規(guī)及認(rèn)證基礎(chǔ)知識(shí)
- MBA考試《英語(yǔ)》歷年真題和解析答案
- 2024廣西專業(yè)技術(shù)人員繼續(xù)教育公需科目參考答案(97分)
- 江蘇省建筑與裝飾工程計(jì)價(jià)定額(2014)電子表格版
- 《船舶柴油機(jī)》教案48頁(yè)
- 開(kāi)盤八法概述
- 強(qiáng)制醫(yī)療三道待解難題
- K-90B聯(lián)機(jī)熱泵控制板規(guī)格書(shū)
- 佛山佛羅倫薩小鎮(zhèn)市調(diào)報(bào)告課堂PPT
- 汽車四輪定位的探討
- 弟子規(guī)正版全文-帶拼音-直接打印版
評(píng)論
0/150
提交評(píng)論