第10章Java持久化API(JPA)ppt課件_第1頁
第10章Java持久化API(JPA)ppt課件_第2頁
第10章Java持久化API(JPA)ppt課件_第3頁
第10章Java持久化API(JPA)ppt課件_第4頁
第10章Java持久化API(JPA)ppt課件_第5頁
已閱讀5頁,還剩64頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、經(jīng)典Java EE課程段鵬松第10章 Java耐久化APIJPA了解ORM的根本概念了解實體的根本概念掌握實體的根本映射掌握實體的關(guān)聯(lián)關(guān)系映射掌握實體的生命周期規(guī)律課程目的概述J2EE時代,運用Entity Bean規(guī)范來處理運用程序的耐久化問題;Java EE5規(guī)范運用JPA作為耐久化處理方案;Sun公司的JPA以Entity為中心,它將實體映射究竟層數(shù)據(jù)表,然后經(jīng)過在運用程序中運用EntityManager來操作Entity,而JPA實現(xiàn)那么會將這種操作轉(zhuǎn)換為對底層數(shù)據(jù)表的操作。JPA只是一種規(guī)范,其本身并不提供實現(xiàn),開發(fā)者需指定JPA的實現(xiàn)。目 錄實體引見實體入門了解實體實體的根本映射關(guān)

2、聯(lián)關(guān)系映射承繼關(guān)系映射運用籠統(tǒng)實體和非實體父類實體的生命周期和監(jiān)聽器ORM的概念ORM:Object /Relation Mapping,對象關(guān)系映射。ORM的根本思想:完成面向?qū)ο蟮木幊萄哉Z到關(guān)系數(shù)據(jù)庫的映射普通是雙向的。ORM出現(xiàn)的緣由:處理面向?qū)ο缶幊萄哉Z和關(guān)系型數(shù)據(jù)庫操作時的不匹配問題。ORM的未來:隨著面向?qū)ο髷?shù)據(jù)庫的出現(xiàn),ORM工具會自動消亡,但短期內(nèi)不會。ORM的概念JPA概述JPA實現(xiàn)作用:把對實體的操作,轉(zhuǎn)換成對數(shù)據(jù)庫的操作。JPA規(guī)范本質(zhì)上就是一種ORM規(guī)范。但JPA并未提供ORM實現(xiàn),它只是指定了一些規(guī)范,提供了一些編程的API,詳細實現(xiàn)由運用效力器廠商來提供。JPA概述

3、數(shù)據(jù)庫HibernateTopLink其他ORM框架.運用程序JPA規(guī)范JPA實現(xiàn)JPA的映射規(guī)那么數(shù)據(jù)表映射實體類把表構(gòu)造映射為實體類類型數(shù)據(jù)表的行映射實體類對象把數(shù)據(jù)表的行記錄映射到實體對象數(shù)據(jù)表的列映射實體的屬性字段映射為實體類的屬性JPA規(guī)范簡介JPA并不屬于EJB3的范疇,它是一套完全獨立的規(guī)范。JPA不僅可以在Java EE中運用,也可以在Java SE中運用。JPA的常用組件:實體EntityManager類似Hibernate中的sessionJPQL類似HQL目 錄實體引見實體入門了解實體實體的根本映射關(guān)聯(lián)關(guān)系映射承繼關(guān)系映射運用籠統(tǒng)實體和非實體父類實體的生命周期和監(jiān)聽器開發(fā)

4、實體JPA管理的實體類就是一個POJO類,再在實體類上添加一些Annotation。Annotation定義了POJO類和底層數(shù)據(jù)表之間的映射關(guān)系。+=POJOannotationEntityJPA的實現(xiàn)目前主流的JPA實現(xiàn)有如下幾種:Hibernate JPA實現(xiàn)TopLink JPA實現(xiàn)OpenJPA實現(xiàn)不同的JPA實現(xiàn)主要經(jīng)過persistence.xml文件的配置信息來區(qū)分在Java SE環(huán)境下運用Hibernate JPA實現(xiàn)為了在Java SE運用程序中運用Hibernate JPA實現(xiàn),必需先下載和安裝Hibernate JPA實現(xiàn)。實踐操作演示在Java SE環(huán)境下運用TopL

5、ink JPA實現(xiàn)Java EE5、GlassFish運用效力器都曾經(jīng)內(nèi)置了TopLink JPA實現(xiàn)。實踐操作演示在Java SE環(huán)境下運用EntityManager運用EntityManager的情形:在EJB中運用EntityManager在Servlet、JSF的托管Bean中運用EntityManager在Java SE運用中運用EntityManager在Java SE環(huán)境下運用EntityManager創(chuàng)建EntityManager的步驟:運用javax.persistence.Persistence工廠類提供的靜態(tài)方法createEntityManagerFactory()運用

6、EntityManagerFactory的createEntityManager()或createEntityManager(Map map)實踐操作演示運轉(zhuǎn)結(jié)果Hibernate和JPA的關(guān)系JPA是一個規(guī)范,Hibernate是對JPA規(guī)范的一種實現(xiàn);JPA也可以用其他的實現(xiàn),如TopLink等Hibernate也有本人的實現(xiàn)類。JPA出現(xiàn)緣由簡化現(xiàn)有Java EE和Java SE運用的對象耐久化的開發(fā)任務(wù)Sun希望整合對ORM技術(shù),實現(xiàn)耐久化領(lǐng)域的一致EntityManager的方法persist():保管實體到數(shù)據(jù)庫merger():合并實體remove():刪除實體find(.):查

7、找實體flush():同步數(shù)據(jù)庫refresh():刷新實體others. JAP的配置方式JPA的配置方式anntotationxml引薦運用annotation實踐操作演示目 錄實體引見實體入門了解實體實體的根本映射關(guān)聯(lián)關(guān)系映射承繼關(guān)系映射運用籠統(tǒng)實體和非實體父類實體的生命周期和監(jiān)聽器耐久化上下文和耐久化單元耐久化上下文是一組處于托管形狀下實體所組成的集合,它處于EntityManager的管理之下。運用程序可以經(jīng)過EntityManager與耐久化上下文交互。耐久化單元由persistence.xml文件定義,運用標簽定義。不論任何類型的運用程序(Java SE、EJB、WAR等),pe

8、risistence.xml文件都應(yīng)該放在META-INF文件夾下面。實體類的要求提供一個無參數(shù)的構(gòu)造器提供一個標識屬性為實體類的每個屬性提供setter和getter方法運用非final的類重寫equals()和hashCode()方法實體的形狀新建(new)在new操作之后托管(managed)被EntityManager所管理,和數(shù)據(jù)庫操作同步脫管(detached)與之管理的EntityManager封鎖,斷開和數(shù)據(jù)庫的銜接被刪除(removed)調(diào)用EntityManager的remove()方法之后實體的形狀新建托管脫管被刪除終了開場new渣滓回收remove()渣滓回收persi

9、st()close()clear()find()getReference()管理實體的方法耐久化實體運用persist()方法根據(jù)逐漸加載實體運用find()方法更新實體運用實體類的setXXX()方法在提交事務(wù)之前實踐操作演示管理實體的方法合并實體運用merge()方法刪除實體運用remove()方法刷新實體運用refresh()方法實踐操作演示目 錄實體引見實體入門了解實體實體的根本映射關(guān)聯(lián)關(guān)系映射承繼關(guān)系映射運用籠統(tǒng)實體和非實體父類實體的生命周期和監(jiān)聽器映射實體類對于各JPA實體類而言,通??梢圆捎萌缦聝蓚€annotation來修飾它EntityTablecatalognameschem

10、auniqueConstraint映射實體類的屬性Column:映射屬性到數(shù)據(jù)庫,其支持的屬性有:inertbalelengthnamenullabletableuniqueupdatableTransient:該屬性不會映射到數(shù)據(jù)庫實踐操作演示映射實體類的屬性Enumerated:映射枚舉類型的屬性EnumTypeSTRING:值ORDINAL:編號Lob:修飾大數(shù)據(jù)類型Basic:可以指定延遲加載fetchoptional實踐操作演示映射實體類的屬性Temporal:修飾日期類型的屬性TemporalTypeDATETIMETIMESTAMP實踐操作演示將實體映射到多個表假設(shè)一個實體的屬性

11、較多,可以把這個實體映射到多個數(shù)據(jù)庫表中。TableSecondaryTableSecondaryTables實踐操作演示映射復合類型的屬性Embedded:映射復合類型屬性Embeddable:修飾作為復合類型的自定義類實踐操作演示映射實體類的主鍵數(shù)據(jù)庫的主鍵普通設(shè)置為自增長的,可以是數(shù)字類型,也可以是字符類型,或者是復合類型。JPA中的單一主鍵運用Id修飾。Id的屬性有:strategygeneratorJPA的復合主鍵運用IdClass和多個Id等來修飾。實踐操作演示目 錄實體引見實體入門了解實體實體的根本映射關(guān)聯(lián)關(guān)系映射承繼關(guān)系映射運用籠統(tǒng)實體和非實體父類實體的生命周期和監(jiān)聽器關(guān)聯(lián)關(guān)系

12、概述關(guān)聯(lián)關(guān)系的概念:實例之間的相互關(guān)聯(lián)關(guān)聯(lián)關(guān)系的分類單向關(guān)聯(lián)單向1-1,單向1-N,單向N-1,單向N-N雙向關(guān)聯(lián)雙向1-1,雙向1-N,雙向N-N單向N-1關(guān)聯(lián)只能從N的一端訪問1的一端經(jīng)過在N的一端援用1的一端來實現(xiàn)需求在N的一端定義1的一端的setter和getter運用的annotation:ManyToOnecascade,fetch,optional,targetEntityJoinColumncolumnDefinition,name等實踐操作演示單向1-1關(guān)聯(lián)只能從1的一端訪問另一端的1經(jīng)過在1的一端援用1的一端來實現(xiàn)需求在1的一端定義1的另一端的setter和getter運用

13、的annotation:OneToOnecascade,fetch,mappedBy,optional,targetEntityJoinColumncolumnDefinition,name等實踐操作演示單向1-N關(guān)聯(lián)只能從1的一端訪問N的一端經(jīng)過在1的一端援用N端來實現(xiàn)需求在1的一端定義N端的setter和getterN端在1端以通常以Set類型出現(xiàn)運用的annotation:OneToManycascade,fetch,mappedBy,optional,targetEntityJoinColumncolumnDefinition,name等實踐操作演示單向N-N關(guān)聯(lián)只能從N的一端訪問另一

14、端的N需求在N的一端定義N的另一端的setter和getter控制端需求添加一個Set集合屬性,該Set集合記錄了當前實體的一切關(guān)聯(lián)實體運用的annotation:ManyToManycascade,fetch,mappedBy,targetEntityJoinTablename,catalog,schema等實踐操作演示雙向1-1關(guān)聯(lián)可以從恣意端訪問對端需求讓兩端都添加對方的援用需求讓兩端都定義對端的setter和getter底層數(shù)據(jù)庫可以在恣意一端添加外鍵運用的annotation:OneToOnecascade,fetch,targetEntityJoinColumnname,nulla

15、ble,schema等實踐操作演示雙向1-N關(guān)聯(lián)可以從恣意端訪問對端需求讓兩端都添加對方的援用需求讓兩端都定義對端的setter和getter實踐工程中盡量運用雙向1-N運用的annotation:OneToMany(1端)ManyToOne(N端)JoinColumn(N端)實踐操作演示雙向N-N關(guān)聯(lián)可以從恣意端訪問對端需求讓兩端都添加對方的援用需求讓兩端都定義對端的setter和getter實踐工程中盡量防止運用雙向N-N運用的annotation:ManyToManycascade,fetch,targetEntityJoinTablename,nullable,schema等實踐操作演

16、示運用Map集合記錄關(guān)聯(lián)實體JPA允許運用Map集合來記錄關(guān)聯(lián)實體。當運用Map集合來記錄關(guān)聯(lián)實體時,Map集合的Key類型通常是 關(guān)聯(lián)實體的主鍵類型。運用的annotation:OneToManyMapKey實踐操作演示對關(guān)聯(lián)實體進展排序運用的annotation:OrderBy指定排序規(guī)那么例如:OrderBy(“屬性名 ASC)通常和OneToMany,ManytoMany結(jié)合運用實踐操作演示目 錄實體引見實體入門了解實體實體的根本映射關(guān)聯(lián)關(guān)系映射承繼關(guān)系映射運用籠統(tǒng)實體和非實體父類實體的生命周期和監(jiān)聽器概述對于面向?qū)ο蟮木幊萄哉Z而言,承繼和多態(tài)是兩個最根本的概念。JPA支持多種承繼映射

17、戰(zhàn)略,不論哪種承繼映射戰(zhàn)略,JPA的多態(tài)查詢都可以運轉(zhuǎn)良好。對于類與類之間的承繼關(guān)系,JPA提供了3中映射戰(zhàn)略:整個類層次對應(yīng)一張表銜接子類的映射戰(zhàn)略每個詳細類對應(yīng)一張表JPA映射戰(zhàn)略概述運用的Annotation:Inheritance不同的戰(zhàn)略JOINED:承繼的子類各自生成一張表SINGLE_TABLE:只生成一張表,用一個字段當鑒別器默許TABLE_PER_CLASS:每個類都消費一張表,包括基類整個類層次對應(yīng)一張表的映射戰(zhàn)略是JPA承繼映射默許的映射戰(zhàn)略。這種映射戰(zhàn)略下,一切的實體都映射到一張表中,經(jīng)過區(qū)分者(discriminator)列來區(qū)分不同的實體。運用的Annotation

18、:DiscriminatorColumnDiscriminatorValue會呵斥數(shù)據(jù)冗余,實踐中盡量防止。實踐操作演示DiscriminatorColumn引見DiscriminatorColumn定義在運用SINGLE_TABLE或JOINED承繼戰(zhàn)略的表中區(qū)別不承繼層次的列。 name:column的名字。默許值為TYPE。 columnDefinition:生成DDL的sql片斷。 length:String類型的column的長度,其他類型運用默許值10。下面的代碼定義了一個列名為DISC,長度為20的String類型的區(qū)別列。 Entity Table(name=CUST) Inh

19、eritance(strategy=SINGLE_TABLE,discriminatorType=STRING, scriminatorValue=CUSTOMER) DiscriminatorColumn(name=DISC,length=20) publicclassCustomer.銜接子表的映射戰(zhàn)略子類實體由父類表和子類表共同存儲,將子類和父類共有的屬性在父類表中存儲,而子類添加的屬性那么保管在子類表中。會有共有主鍵存在。運用的Annotation:Inheritance必需指定strategy屬性實踐操作演示每個詳細類對應(yīng)一張表的映射戰(zhàn)略父類的屬性保管在父類表中,子類的屬性保管在子類

20、表中。但從數(shù)據(jù)庫方面,難以看出承繼關(guān)系。不能運用主鍵自增戰(zhàn)略運用的Annotation:Inheritance必需指定strategy屬性實踐操作演示目 錄實體引見實體入門了解實體實體的根本映射關(guān)聯(lián)關(guān)系映射承繼關(guān)系映射運用籠統(tǒng)實體和非實體父類實體的生命周期和監(jiān)聽器概述除了常規(guī)實體之間的承繼關(guān)系外,JPA還有一些特殊用法:JPA的實體不僅可以是詳細類,也可以是籠統(tǒng)類;JPA的實體可以承繼非實體,這個父類被稱為非實體父類。本節(jié)將詳細引見這兩種特殊用法。籠統(tǒng)實體運用Entity修飾籠統(tǒng)類,該籠統(tǒng)類就稱為籠統(tǒng)實體;籠統(tǒng)實體和詳細實體的獨一區(qū)別:籠統(tǒng)實體的實現(xiàn)類是籠統(tǒng)類,因此程序無法直接創(chuàng)建籠統(tǒng)實體的實

21、例。對籠統(tǒng)實體的查詢操作,會轉(zhuǎn)換為該籠統(tǒng)實體子類的相應(yīng)查詢操作,是一種典型的多態(tài)操作。實踐操作演示非實體父類JPA實體的父類既可以是實體,也可以是非實體。非實體父類既可以是詳細類,也可以是籠統(tǒng)類。運用MappedSuperclass修飾非實體父類。實踐操作演示非實體父類的特點非實體父類在底層數(shù)據(jù)庫中并沒有對應(yīng)的數(shù)據(jù)表。非實體父類不能運用EntityManager執(zhí)行保管、更新和查詢。非實體父類不能運用Query執(zhí)行查詢?;\統(tǒng)實體和非實體父類的區(qū)別:籠統(tǒng)實領(lǐng)會生成數(shù)據(jù)庫表,非實體父類不會重定義非實體子類的外鍵列對于非實體父類,假設(shè)和其他實體之間存在關(guān)聯(lián)關(guān)系,那它的一切子類都能夠需求添加額外的外鍵列,這樣才干記錄它的一切子類實體和關(guān)聯(lián)實體之間的關(guān)聯(lián)關(guān)系。默許情況下,外鍵列的稱號都是一樣的,假想象修正可以運用以下annotation:AssociationOverrideAssociationOverrides實踐操作演示目 錄實體引見實體入門了解實體實體的根本映射關(guān)聯(lián)關(guān)系映射承繼關(guān)系映射運

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論