![JPA從入門到精通_第1頁](http://file4.renrendoc.com/view/aec93a08e797c23e17b0e9b67d6f57bb/aec93a08e797c23e17b0e9b67d6f57bb1.gif)
![JPA從入門到精通_第2頁](http://file4.renrendoc.com/view/aec93a08e797c23e17b0e9b67d6f57bb/aec93a08e797c23e17b0e9b67d6f57bb2.gif)
![JPA從入門到精通_第3頁](http://file4.renrendoc.com/view/aec93a08e797c23e17b0e9b67d6f57bb/aec93a08e797c23e17b0e9b67d6f57bb3.gif)
![JPA從入門到精通_第4頁](http://file4.renrendoc.com/view/aec93a08e797c23e17b0e9b67d6f57bb/aec93a08e797c23e17b0e9b67d6f57bb4.gif)
![JPA從入門到精通_第5頁](http://file4.renrendoc.com/view/aec93a08e797c23e17b0e9b67d6f57bb/aec93a08e797c23e17b0e9b67d6f57bb5.gif)
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
JPA簡介
主要內容JPA概述使用JPA的步驟實體JPA的APIJPQL主要內容JPA概述使用JPA的步驟實體JPA的APIJPQLJPA概述JPA是什么JPA的產(chǎn)生為什么要使用JPAJPA和Hibernate的關系JPA的供應商JPA的實現(xiàn)JPA的優(yōu)勢JPA的缺點JPA主要的技術一、JPA概述—JPA是什么JavaPersistenceAPI,用于對象持久化的API是JavaEE5.0平臺標準的
ORM規(guī)范,使得應用程序以統(tǒng)一的方式訪問持久層一、JPA概述—JPA是什么JPA是EJB3EntityBean,是一套從EJB3.0核心標準中分離出來的獨立的標準文檔J2EE4規(guī)范中最為人所熟悉的用來處理數(shù)據(jù)持久的EntityBean,
在JavaEE5中被推到重來,取而代之的是java開發(fā)的通用持久化規(guī)范JavaPersistenceAPI1.0,其實就是完全重新定義了的EntityBean規(guī)范;JPA作為java中負責關系數(shù)據(jù)持久化的組件已經(jīng)完全獨立出來成為一個單獨的規(guī)范,而不再屬于EnterpriseJavaBean的范疇
(EJB更多的是指Stateless/Statefulsessionbean和MessageDrivenBean)。使用的Java的版本決定了實際是否可以應用JPA。
因為JPA是EJB3.0規(guī)范的一部分,而EJB3.0規(guī)范是JavaEE5版本的一部分。如果您未更新到JavaEE5,則無法使用JPA。
一、JPA概述—JPA是什么提供了以pojo編程模型為持久化對象的機制:通過JDK5.0注解或XML描述對象-關系表的映射關系,并將運行期的實體對象持久化到數(shù)據(jù)庫中,下圖描述了JPA的結構:
一、JPA概述—JPA的產(chǎn)生Sun引入新的JPAORM規(guī)范出于兩個原因:其一,簡化現(xiàn)有JavaEE和JavaSE應用的對象持久化的開發(fā)工作:和實體Bean相比,不需要配置文件,提供了更好的開發(fā)體驗不同于EJB3.0,JPA并不是J2EE環(huán)境專用,在J2SE的環(huán)境中也可以使用(不依賴J2EE容器,是java中的通用API)其二,Sun希望整合ORM技術,統(tǒng)一各種ORM框架的規(guī)范,實現(xiàn)天下歸一。
(目前Hibernate3.2、TopLink10.1.3以及OpenJpa都提供了JPA的實現(xiàn))一、JPA概述—為什么要使用JPA一、JPA概述—JPA和Hibernate的關系JPA是hibernate的一個抽象或者可以理解為接口(就像JDBC和JDBC驅動的關系):JPA是規(guī)范:JPA本質上就是一種ORM規(guī)范,不是ORM框架——因為JPA并未提供ORM實現(xiàn),它只是制訂了一些規(guī)范,提供了一些編程的API接口,但具體實現(xiàn)則由用用服務器廠商來提供實現(xiàn)Hibernate是實現(xiàn):Hibernate除了作為ORM框架之外,它也是一種JPA實現(xiàn)從功能上來說,JPA現(xiàn)在就是Hibernate功能的一個子集一、JPA概述—JPA的供應商
JPA的目標之一是制定一個可以由很多供應商實現(xiàn)的API,目前Hibernate3.2、TopLink10.1.3以及OpenJpa都提供了JPA的實現(xiàn)HibernateJPA的始作俑者就是Hibernate的作者Hibernate從3.2開始,就開始兼容JPAOpenJPAOpenJPA是Apache組織提供的開源項目TopLinkTopLink以前需要收費,如今開源了;OpenJPA雖然免費,但功能、性能、普及性等方面更加需要加大力度。一、JPA概述—JPA的實現(xiàn)JPA做為JavaEE5里面的新成員,跟jdbc一樣就是一接口,具體實現(xiàn)由服務器實現(xiàn)你選擇什么服務器就基本上決定了用哪個JPA實現(xiàn)JBoss就是用hibernate去實現(xiàn)的weblogic是用OpenJPAOracle是用TopLink一、JPA概述—JPA的優(yōu)勢標準化提供相同的訪問API,這保證了基于JPA開發(fā)的企業(yè)應用能夠經(jīng)過少量的修改就能夠在不同的JPA框架下運行。越來越多的提供商期待在不久的將來提供JPA實施。對容器級特性的支持
JPA框架中支持大數(shù)據(jù)集、事務、并發(fā)等容器級事務簡單易用,集成方便
JPA的主要目標之一就是提供更加簡單的編程模型,在JPA框架下創(chuàng)建實體和創(chuàng)建Java類一樣簡單,只需要使用javax.persistence.Entity進行注釋;JPA的框架和接口也都非常簡單,可媲美JDBC的查詢能力
JPA的查詢語言是面向對象的,JPA定義了獨特的JPQL,而且能夠支持批量更新和修改、JOIN、GROUPBY、HAVING等通常只有SQL才能夠提供的高級查詢特性,甚至還能夠支持子查詢。支持面向對象的高級特性
JPA中能夠支持面向對象的高級特性,如類之間的繼承、多態(tài)和類之間的復雜關系,最大限度的使用面向對象的模型一、JPA概述—JPA的缺點由于非常新,JPA規(guī)范可能還需要進過重要發(fā)展才會變得很穩(wěn)定。JPA是一個規(guī)范而不是一個產(chǎn)品。
需要提供商提供一個實施,才能獲得這些基于標準的API的優(yōu)勢。JPA是Hibernate、TopLink,JDO等ORM框架真子集,只提供其中最好的功能,如果應用程序中需要的功能,但是規(guī)范中沒有提供的功能,則使用供應商特有的API,移植起來比較麻煩,所以要盡可能地使用JPAAPI。一、JPA概述—JPA包括3方面的技術ORM映射元數(shù)據(jù):JPA支持XML和JDK5.0注解兩種元數(shù)據(jù)的形式,元數(shù)據(jù)描述對象和表之間的映射關系,框架據(jù)此將實體對象持久化到數(shù)據(jù)庫表中。
JPA的API:用來操作實體對象,執(zhí)行CRUD操作,框架在后臺替我們完成所有的事情,開發(fā)者從繁瑣的JDBC和SQL代碼中解脫出來。
查詢語言:這是持久化操作中很重要的一個方面,通過面向對象而非面向數(shù)據(jù)庫的查詢語言查詢數(shù)據(jù),避免程序的SQL語句緊密耦合。主要內容JPA概述使用JPA的步驟實體JPA的APIJPQL二、使用JPA持久化對象的步驟創(chuàng)建persistence.xml,在這個文件中配置持久化單元(Hibernate中的hibernate.cfg.xml);;需要指定跟哪個數(shù)據(jù)庫進行交互;需要指定JPA使用哪個持久化的框架;(因為他本身沒有持久化能力);創(chuàng)建EntityManagerFactory(Hibernate中的SessionFactory);創(chuàng)建EntityManager(實體管理器)(Hibernate中的Session);創(chuàng)建實體類,使用annotation來描述實體類跟數(shù)據(jù)庫表之間的一一映射關系.使用JPAAPI完成數(shù)據(jù)增加、刪除、修改和查詢操作JPA的執(zhí)行過程persistence.xml持久化單元持久化單元
:persistence-unit數(shù)據(jù)庫相關的信息持久化提供者信息(Hibernate、Toplink…)廠商的一些客戶化屬性
<propertyname="hibernate.show_sql"value="true"/>其他可選的一些元數(shù)據(jù)如果使用不同的持久化提供程序,那么需要指定提供程序類附加的ORM映射文件附加的ORM映射文件附加實體的JAR文件一個持久化單元可以創(chuàng)建一個EntityManagerFactory持久化提供者PersistenceProvider:持久化提供者JPA只是一套標準的持久化API,它需要通過一個ORM框架,才能進行持久化,我們把這個能和JPA集成起來的ORM框架稱為持久化的提供者;每一個支持ebj3.0JPA的ORM框架必須提供一個實現(xiàn)javax.persistence.spi.PersistenceProvider接口的實現(xiàn)類,通過它創(chuàng)建EntityManager對象使用JPA實現(xiàn)增加、刪除、修改和查詢操作EntityManagerFactory實體管理器的工廠,類似于Hibernate中的SessionFactory通過持久化提供者PersistenceProvider創(chuàng)建這個對象應用程序管理用來創(chuàng)建EntityManager實例一個數(shù)據(jù)庫創(chuàng)建一個EntityManagerFactory對象EntityManager實體管理器,類似于Hibernate的Session由EntityManagerFacotry創(chuàng)建用來訪問持久化上下文中實體對象的一個接口,管理實體對象與底層數(shù)據(jù)源之間進行O/R映射,包括增刪改查一個線程一個EntityManager對象,EntityManager獲取EntityManager對象的方式應用程序管理EntityManager應用程序通過javax.persistence.EntityManagerFactory的createEntityManager創(chuàng)建EntityManager實例容器管理EntityManager通過依賴注入獲取PersistenceContext:持久化上下文其實就是JPA的一級緩存是一系列實體的管理環(huán)境,實體對象集合被EntityManager管理著的,通過EntityManager和持久化上下文進行交互。持久化上下文類型應用程序管理應用程序來管理所需資源持久化上下文是綁定到當前EntityManager容器管理,又分為兩種:和事務范圍相關持久化上下文事務啟動就會創(chuàng)建,事務結束也會結束;在無狀態(tài)sessionbean中使用;擴展的持久化上下文和有狀態(tài)sessionbean結合使用,它的生命周期和事務無關;當Sessionbean對象創(chuàng)建,持久化上下文就創(chuàng)建;
當Sessionbean對象銷毀,持久化上下文就結束JPA的使用步驟JPA的使用步驟JPA的使用步驟主要內容JPA概述使用JPA的步驟實體JPA的APIJPQL三、實體三、實體三、實體三、實體三、實體—實體的定義
實體具備以下的條件:必須使用javax.persistence.Entity注解或者在XML映射文件中有對應的元素;
必須具有一個不帶參的構造函數(shù),
類不能聲明為final,
方法和需要持久化的屬性也不能聲明為final;
如果游離狀的實體對象需要以值的方式進行傳遞,如通Sessionbean的遠程業(yè)務接口傳遞,則必須實現(xiàn)Serializable接口;
需要持久化的屬性,其訪問修飾符不能是public,它們必須通過實體類方法進行訪問。三、實體—Annotation—基本注解
基本注解@Entity將對象標注為一個實體,表示需要保存到數(shù)據(jù)庫中默認情況下類名即為表名,通過name屬性顯式指定表名@Id對應的屬性是表的主鍵@GeneratedValue主鍵的產(chǎn)生策略,通過strategy屬性指定;默認情況下,JPA自動選擇一個最適合底層數(shù)據(jù)庫的主鍵生成策略可供選擇的策略IDENTITY:表自增鍵字段(SqlServer對應策略,Oracle不支持這種方式)AUTO:JPA自動選擇合適的策略,是默認選項(MySql對應策略);SEQUENCE:通過序列產(chǎn)生主鍵,通過@SequenceGenerator注解指定序列名(如Oracle的Sequence,MySql不支持這種方式);TABLE:通過表產(chǎn)生主鍵,使用該策略可以使應用更易于數(shù)據(jù)庫移植。不同的JPA實現(xiàn)商生成的表名是不同的。三、實體—Annotation—基本注解
基本注解@EmbeddedId或@IdClass組合關鍵字@Column屬性對應的表字段三、實體—Annotation—繼承關系
繼承關系:
對于繼承的實體,在javax.persistence.InheritanceType定義了3種映射策略SINGLE_TABLE
父子類都保存到同一個表中,通過字段值進行區(qū)分。
JOINED
父子類相同的部分保存在同一個表中,不同的部分分開存放,通過表連接獲取完整數(shù)據(jù)。TABLE_PER_CLASS
每一個類對應自己的表(一般不推薦采用這種方式)。三、實體—Annotation—關聯(lián)關系關聯(lián)關系:
@OneToOne
@OneToMany
@ManyToOne@ManyToMany
主要內容JPA概述使用JPA的步驟實體JPA的APIJPQL四、JPA的API下面是EntityManager的一些主要的接口方法voidpersist(Objectentity)新實體實例將轉換為受控狀態(tài)voidremove(Objectentity)刪除某個實體對象,也就是刪除數(shù)據(jù)庫中某條記錄voidflush()將受控態(tài)的實體數(shù)據(jù)同步到數(shù)據(jù)庫中Tmerge(Tentity)游離態(tài)的實體持久化到數(shù)據(jù)庫中,并轉換為受控態(tài)的實體Tfind(ClassentityClass,ObjectprimaryKey)以主鍵查詢實體對象,entityClass是實體的類,primaryKey是主鍵值四、JPA的API--修改四、JPA的API--刪除JPA的生命周期
實體的狀態(tài)新建態(tài)new
新創(chuàng)建的實體對象,尚未擁有持久化主鍵,沒有和一個持久化上下文關聯(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ù)庫中刪除主要內容JPA概述使用JPA的步驟實體JPA的APIJPQL五、
JPQL
JavaPersistenceQueryLanguage(Java持久化查詢語言)是一種可移植的查詢語言,可以被編譯成所有主流數(shù)據(jù)庫服務器上的SQLJPQL是面向對象的,通過面向對象而非面向數(shù)據(jù)庫的查詢語言查詢數(shù)據(jù),在Java空間對類和對象進行操作,避免程序的SQL語句緊密耦合使用javax.persistence.Query接口代表一個查詢實例五、
JPQL—創(chuàng)建Query實例
通過EntityManager來生成Query實例:
EntityManager提供的使用JPQL(或原生SQL)創(chuàng)建Query的方法:五、
JPQL—使用Query接口Query接口執(zhí)行數(shù)據(jù)查詢的部分方法:getSingleResult():單一查詢結果getResultList():多個查詢結果setParameter:QuerysetParameter(intposition,Objectvalue):通過參數(shù)位置號綁定查詢語句中的參數(shù)Quer
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- SMARCA2-ligand-12-3-methylazetidine-生命科學試劑-MCE-3446
- N-Methylcanadium-iodide-生命科學試劑-MCE-3917
- 3-Fluoro-4-hydroxymethyl-benzonitrile-d2-4-Cyano-2-fluorobenzyl-alcohol-d-sub-2-sub-生命科學試劑-MCE-3394
- 二零二五年度影視作品分紅協(xié)議書
- 二零二五年度紅磚新材料研發(fā)與應用合作協(xié)議書
- 2025年度電影項目演員聘用合同模板
- 二零二五年度企業(yè)薪資補充協(xié)議及員工住房補貼
- 2025年度綠色生態(tài)園區(qū)物業(yè)公司股權轉讓合作協(xié)議
- 二零二五年度私人老板與藝術策展人合作協(xié)議
- 二零二五年度科研機構競業(yè)禁止協(xié)議期限與成果轉化
- 口腔種植術單病種質控查檢表
- 中日勞務合同范本
- 白宮-人工智能行業(yè):美國人工智能權利法案藍圖(英譯中)
- 營口市大學生專考專招考試真題2022
- 典范英語8-15Here comes trouble原文翻譯
- 六安市葉集化工園區(qū)污水處理廠及配套管網(wǎng)一期工程環(huán)境影響報告書
- 運動技能學習與控制課件第一章運動技能學習與控制概述
- 固體廢棄物檢查記錄
- 工程設計費取費標準
- 2023年遼寧鐵道職業(yè)技術學院高職單招(數(shù)學)試題庫含答案解析
- CAPP教學講解課件
評論
0/150
提交評論