版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
JPA簡介
主要內(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)勢JPA的缺點(diǎn)JPA主要的技術(shù)一、JPA概述—JPA是什么JavaPersistenceAPI,用于對象持久化的API是JavaEE5.0平臺(tái)標(biāo)準(zhǔn)的
ORM規(guī)范,使得應(yīng)用程序以統(tǒng)一的方式訪問持久層一、JPA概述—JPA是什么JPA是EJB3EntityBean,是一套從EJB3.0核心標(biāo)準(zhǔn)中分離出來的獨(dú)立的標(biāo)準(zhǔn)文檔J2EE4規(guī)范中最為人所熟悉的用來處理數(shù)據(jù)持久的EntityBean,
在JavaEE5中被推到重來,取而代之的是java開發(fā)的通用持久化規(guī)范JavaPersistenceAPI1.0,其實(shí)就是完全重新定義了的EntityBean規(guī)范;JPA作為java中負(fù)責(zé)關(guān)系數(shù)據(jù)持久化的組件已經(jīng)完全獨(dú)立出來成為一個(gè)單獨(dú)的規(guī)范,而不再屬于EnterpriseJavaBean的范疇
(EJB更多的是指Stateless/Statefulsessionbean和MessageDrivenBean)。使用的Java的版本決定了實(shí)際是否可以應(yīng)用JPA。
因?yàn)镴PA是EJB3.0規(guī)范的一部分,而EJB3.0規(guī)范是JavaEE5版本的一部分。如果您未更新到JavaEE5,則無法使用JPA。
一、JPA概述—JPA是什么提供了以pojo編程模型為持久化對象的機(jī)制:通過JDK5.0注解或XML描述對象-關(guān)系表的映射關(guān)系,并將運(yùn)行期的實(shí)體對象持久化到數(shù)據(jù)庫中,下圖描述了JPA的結(jié)構(gòu):
一、JPA概述—JPA的產(chǎn)生Sun引入新的JPAORM規(guī)范出于兩個(gè)原因:其一,簡化現(xiàn)有JavaEE和JavaSE應(yīng)用的對象持久化的開發(fā)工作:和實(shí)體Bean相比,不需要配置文件,提供了更好的開發(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ù)器廠商來提供實(shí)現(xiàn)Hibernate是實(shí)現(xiàn):Hibernate除了作為ORM框架之外,它也是一種JPA實(shí)現(xiàn)從功能上來說,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開始,就開始兼容JPAOpenJPAOpenJPA是Apache組織提供的開源項(xiàng)目TopLinkTopLink以前需要收費(fè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)勢標(biāo)準(zhǔn)化提供相同的訪問API,這保證了基于JPA開發(fā)的企業(yè)應(yīng)用能夠經(jīng)過少量的修改就能夠在不同的JPA框架下運(yùn)行。越來越多的提供商期待在不久的將來提供JPA實(shí)施。對容器級特性的支持
JPA框架中支持大數(shù)據(jù)集、事務(wù)、并發(fā)等容器級事務(wù)簡單易用,集成方便
JPA的主要目標(biāo)之一就是提供更加簡單的編程模型,在JPA框架下創(chuàng)建實(shí)體和創(chuàng)建Java類一樣簡單,只需要使用javax.persistence.Entity進(jìn)行注釋;JPA的框架和接口也都非常簡單,可媲美JDBC的查詢能力
JPA的查詢語言是面向?qū)ο蟮?,JPA定義了獨(dú)特的JPQL,而且能夠支持批量更新和修改、JOIN、GROUPBY、HAVING等通常只有SQL才能夠提供的高級查詢特性,甚至還能夠支持子查詢。支持面向?qū)ο蟮母呒壧匦?/p>
JPA中能夠支持面向?qū)ο蟮母呒壧匦?,如類之間的繼承、多態(tài)和類之間的復(fù)雜關(guān)系,最大限度的使用面向?qū)ο蟮哪P鸵?、JPA概述—JPA的缺點(diǎn)由于非常新,JPA規(guī)范可能還需要進(jìn)過重要發(fā)展才會(huì)變得很穩(wěn)定。JPA是一個(gè)規(guī)范而不是一個(gè)產(chǎn)品。
需要提供商提供一個(gè)實(shí)施,才能獲得這些基于標(biāo)準(zhǔn)的API的優(yōu)勢。JPA是Hibernate、TopLink,JDO等ORM框架真子集,只提供其中最好的功能,如果應(yīng)用程序中需要的功能,但是規(guī)范中沒有提供的功能,則使用供應(yīng)商特有的API,移植起來比較麻煩,所以要盡可能地使用JPAAPI。一、JPA概述—JPA包括3方面的技術(shù)ORM映射元數(shù)據(jù):JPA支持XML和JDK5.0注解兩種元數(shù)據(jù)的形式,元數(shù)據(jù)描述對象和表之間的映射關(guān)系,框架據(jù)此將實(shí)體對象持久化到數(shù)據(jù)庫表中。
JPA的API:用來操作實(shí)體對象,執(zhí)行CRUD操作,框架在后臺(tái)替我們完成所有的事情,開發(fā)者從繁瑣的JDBC和SQL代碼中解脫出來。
查詢語言:這是持久化操作中很重要的一個(gè)方面,通過面向?qū)ο蠖敲嫦驍?shù)據(jù)庫的查詢語言查詢數(shù)據(jù),避免程序的SQL語句緊密耦合。主要內(nèi)容JPA概述使用JPA的步驟實(shí)體JPA的APIJPQL二、使用JPA持久化對象的步驟創(chuàng)建persistence.xml,在這個(gè)文件中配置持久化單元(Hibernate中的hibernate.cfg.xml);;需要指定跟哪個(gè)數(shù)據(jù)庫進(jìn)行交互;需要指定JPA使用哪個(gè)持久化的框架;(因?yàn)樗旧頉]有持久化能力);創(chuàng)建EntityManagerFactory(Hibernate中的SessionFactory);創(chuàng)建EntityManager(實(shí)體管理器)(Hibernate中的Session);創(chuàng)建實(shí)體類,使用annotation來描述實(shí)體類跟數(shù)據(jù)庫表之間的一一映射關(guān)系.使用JPAAPI完成數(shù)據(jù)增加、刪除、修改和查詢操作JPA的執(zhí)行過程persistence.xml持久化單元持久化單元
:persistence-unit數(shù)據(jù)庫相關(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,它需要通過一個(gè)ORM框架,才能進(jìn)行持久化,我們把這個(gè)能和JPA集成起來的ORM框架稱為持久化的提供者;每一個(gè)支持ebj3.0JPA的ORM框架必須提供一個(gè)實(shí)現(xiàn)javax.persistence.spi.PersistenceProvider接口的實(shí)現(xiàn)類,通過它創(chuàng)建EntityManager對象使用JPA實(shí)現(xiàn)增加、刪除、修改和查詢操作EntityManagerFactory實(shí)體管理器的工廠,類似于Hibernate中的SessionFactory通過持久化提供者PersistenceProvider創(chuàng)建這個(gè)對象應(yīng)用程序管理用來創(chuàng)建EntityManager實(shí)例一個(gè)數(shù)據(jù)庫創(chuàng)建一個(gè)EntityManagerFactory對象EntityManager實(shí)體管理器,類似于Hibernate的Session由EntityManagerFacotry創(chuàng)建用來訪問持久化上下文中實(shí)體對象的一個(gè)接口,管理實(shí)體對象與底層數(shù)據(jù)源之間進(jìn)行O/R映射,包括增刪改查一個(gè)線程一個(gè)EntityManager對象,EntityManager獲取EntityManager對象的方式應(yīng)用程序管理EntityManager應(yīng)用程序通過javax.persistence.EntityManagerFactory的createEntityManager創(chuàng)建EntityManager實(shí)例容器管理EntityManager通過依賴注入獲取PersistenceContext:持久化上下文其實(shí)就是JPA的一級緩存是一系列實(shí)體的管理環(huán)境,實(shí)體對象集合被EntityManager管理著的,通過EntityManager和持久化上下文進(jìn)行交互。持久化上下文類型應(yīng)用程序管理應(yīng)用程序來管理所需資源持久化上下文是綁定到當(dāng)前EntityManager容器管理,又分為兩種:和事務(wù)范圍相關(guān)持久化上下文事務(wù)啟動(dòng)就會(huì)創(chuàng)建,事務(wù)結(jié)束也會(huì)結(jié)束;在無狀態(tài)sessionbean中使用;擴(kuò)展的持久化上下文和有狀態(tài)sessionbean結(jié)合使用,它的生命周期和事務(wù)無關(guān);當(dāng)Sessionbean對象創(chuàng)建,持久化上下文就創(chuàng)建;
當(dāng)Sessionbean對象銷毀,持久化上下文就結(jié)束JPA的使用步驟JPA的使用步驟JPA的使用步驟主要內(nèi)容JPA概述使用JPA的步驟實(shí)體JPA的APIJPQL三、實(shí)體三、實(shí)體三、實(shí)體三、實(shí)體三、實(shí)體—實(shí)體的定義
實(shí)體具備以下的條件:必須使用javax.persistence.Entity注解或者在XML映射文件中有對應(yīng)的元素;
必須具有一個(gè)不帶參的構(gòu)造函數(shù),
類不能聲明為final,
方法和需要持久化的屬性也不能聲明為final;
如果游離狀的實(shí)體對象需要以值的方式進(jìn)行傳遞,如通Sessionbean的遠(yuǎn)程業(yè)務(wù)接口傳遞,則必須實(shí)現(xiàn)Serializable接口;
需要持久化的屬性,其訪問修飾符不能是public,它們必須通過實(shí)體類方法進(jìn)行訪問。三、實(shí)體—Annotation—基本注解
基本注解@Entity將對象標(biāo)注為一個(gè)實(shí)體,表示需要保存到數(shù)據(jù)庫中默認(rèn)情況下類名即為表名,通過name屬性顯式指定表名@Id對應(yīng)的屬性是表的主鍵@GeneratedValue主鍵的產(chǎn)生策略,通過strategy屬性指定;默認(rèn)情況下,JPA自動(dòng)選擇一個(gè)最適合底層數(shù)據(jù)庫的主鍵生成策略可供選擇的策略IDENTITY:表自增鍵字段(SqlServer對應(yīng)策略,Oracle不支持這種方式)AUTO:JPA自動(dòng)選擇合適的策略,是默認(rèn)選項(xiàng)(MySql對應(yīng)策略);SEQUENCE:通過序列產(chǎn)生主鍵,通過@SequenceGenerator注解指定序列名(如Oracle的Sequence,MySql不支持這種方式);TABLE:通過表產(chǎn)生主鍵,使用該策略可以使應(yīng)用更易于數(shù)據(jù)庫移植。不同的JPA實(shí)現(xiàn)商生成的表名是不同的。三、實(shí)體—Annotation—基本注解
基本注解@EmbeddedId或@IdClass組合關(guān)鍵字@Column屬性對應(yīng)的表字段三、實(shí)體—Annotation—繼承關(guān)系
繼承關(guān)系:
對于繼承的實(shí)體,在javax.persistence.InheritanceType定義了3種映射策略SINGLE_TABLE
父子類都保存到同一個(gè)表中,通過字段值進(jìn)行區(qū)分。
JOINED
父子類相同的部分保存在同一個(gè)表中,不同的部分分開存放,通過表連接獲取完整數(shù)據(jù)。TABLE_PER_CLASS
每一個(gè)類對應(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í)體對象,也就是刪除數(shù)據(jù)庫中某條記錄voidflush()將受控態(tài)的實(shí)體數(shù)據(jù)同步到數(shù)據(jù)庫中Tmerge(Tentity)游離態(tài)的實(shí)體持久化到數(shù)據(jù)庫中,并轉(zhuǎn)換為受控態(tài)的實(shí)體Tfind(ClassentityClass,ObjectprimaryKey)以主鍵查詢實(shí)體對象,entityClass是實(shí)體的類,primaryKey是主鍵值四、JPA的API--修改四、JPA的API--刪除JPA的生命周期
實(shí)體的狀態(tài)新建態(tài)new
新創(chuàng)建的實(shí)體對象,尚未擁有持久化主鍵,沒有和一個(gè)持久化上下文關(guān)聯(lián)起來受控態(tài)managed
已經(jīng)擁有持久化主鍵并和持久化上下文建立了聯(lián)系游離態(tài)detached
擁有持久化主鍵,但尚未和持久化上下文建立聯(lián)系刪除態(tài)removed擁有持久化主鍵,已經(jīng)和持久化上下文建立聯(lián)系,但已經(jīng)被安排從數(shù)據(jù)庫中刪除主要內(nèi)容JPA概述使用JPA的步驟實(shí)體JPA的APIJPQL五、
JPQL
JavaPersistenceQueryLanguage(Java持久化查詢語言)是一種可移植的查詢語言,可以被編譯成所有主流數(shù)據(jù)庫服務(wù)器上的SQLJPQL是面向?qū)ο蟮模ㄟ^面向?qū)ο蠖敲嫦驍?shù)據(jù)庫的查詢語言查詢數(shù)據(jù),在Java空間對類和對象進(jìn)行操作,避免程序的SQL語句緊密耦合使用javax.persistence.Query接口代表一個(gè)查詢實(shí)例五、
JPQL—?jiǎng)?chuàng)建Query實(shí)例
通過EntityManager來生成Query實(shí)例:
EntityManager提供的使用JPQL(或原生SQL)創(chuàng)建Query的方法:五、
JPQL—使用Query接口Query接口執(zhí)行數(shù)據(jù)查詢的部分方法:getSingleResult():單一查詢結(jié)果getResultList():多個(gè)查詢結(jié)果setParameter:QuerysetParameter(intposition,Objectvalue):通過參數(shù)位置號(hào)綁定查詢語句中的參數(shù)Quer
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年西藏革吉縣農(nóng)業(yè)農(nóng)村和科技水利局招聘工程專業(yè)技術(shù)人員和工程項(xiàng)目資料員招聘5人備考題庫及一套答案詳解
- 2025年浙江招聘恒信農(nóng)商銀行專職清非人員的備考題庫有答案詳解
- 成都市公安局龍泉驛區(qū)分局2025年公開招聘警務(wù)輔助人員備考題庫參考答案詳解
- 2025年漳州市公安局公開招聘警務(wù)輔助人員104人備考題庫及參考答案詳解1套
- 2025年招商銀行總行資產(chǎn)負(fù)債管理部社會(huì)招聘備考題庫及一套答案詳解
- 2025年招商銀行無錫分行社會(huì)招聘備考題庫帶答案詳解
- 2025年臺(tái)州市自然資源和規(guī)劃局黃巖分局公開招聘編制外工作人員備考題庫含答案詳解
- 2025年福州市鼓樓區(qū)司法局面向殘疾人定向招聘司法協(xié)理員備考題庫及1套完整答案詳解
- 2025年及未來5年市場數(shù)據(jù)中國D-半胱氨酸鹽酸鹽市場供需格局及未來發(fā)展趨勢報(bào)告
- 2025年濟(jì)南市歷城區(qū)教育和體育局所屬學(xué)校備考題庫赴部分高校招聘90人備考題庫及完整答案詳解一套
- 《當(dāng)代國際政治與經(jīng)濟(jì)》主觀題常用答題語言和答題模板
- 2024年度江蘇省二級建造師之二建機(jī)電工程實(shí)務(wù)練習(xí)題及答案
- 2025年大學(xué)物理考試熱力學(xué)第一定律應(yīng)用試題及答案
- JJF(黔) 76-2024 鋼筋彎曲試驗(yàn)機(jī)校準(zhǔn)規(guī)范
- 2022安全閥在線校驗(yàn)規(guī)程
- 精準(zhǔn)分析分離與鑒定技術(shù)知到智慧樹章節(jié)測試課后答案2024年秋浙江中醫(yī)藥大學(xué)
- 軟件開發(fā)工程師:人工智能算法工程師簡歷
- 美容營銷培訓(xùn)課程
- 養(yǎng)老護(hù)老知識(shí)培訓(xùn)課件
- 華為質(zhì)量管理手冊
- 機(jī)械加工檢驗(yàn)標(biāo)準(zhǔn)及方法
評論
0/150
提交評論