多對(duì)多的實(shí)體映射實(shí)現(xiàn)-文檔資料_第1頁(yè)
多對(duì)多的實(shí)體映射實(shí)現(xiàn)-文檔資料_第2頁(yè)
多對(duì)多的實(shí)體映射實(shí)現(xiàn)-文檔資料_第3頁(yè)
多對(duì)多的實(shí)體映射實(shí)現(xiàn)-文檔資料_第4頁(yè)
多對(duì)多的實(shí)體映射實(shí)現(xiàn)-文檔資料_第5頁(yè)
已閱讀5頁(yè),還剩18頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、多對(duì)多的實(shí)體映射實(shí)現(xiàn)多對(duì)多的實(shí)體映射實(shí)現(xiàn)楊少波楊少波中科院計(jì)算所職業(yè)培訓(xùn)中心中科院計(jì)算所職業(yè)培訓(xùn)中心 多對(duì)多的實(shí)體映射實(shí)現(xiàn)多對(duì)多的實(shí)體映射實(shí)現(xiàn)在本講您能了解如下知識(shí)點(diǎn)在本講您能了解如下知識(shí)點(diǎn)q創(chuàng)建創(chuàng)建HibernateHibernate的配置文件。的配置文件。q創(chuàng)建持久化類(lèi)。創(chuàng)建持久化類(lèi)。q創(chuàng)建對(duì)象創(chuàng)建對(duì)象- -關(guān)系映射文件。關(guān)系映射文件。q編程基于編程基于HibernateHibernate的的DAODAO組件組件q實(shí)現(xiàn)實(shí)現(xiàn)“多對(duì)多多對(duì)多”的關(guān)聯(lián)映射的關(guān)聯(lián)映射1 1、多對(duì)多關(guān)聯(lián)的實(shí)現(xiàn)方案、多對(duì)多關(guān)聯(lián)的實(shí)現(xiàn)方案(1 1)類(lèi)似一對(duì)多情形中的最常用方案,為關(guān)聯(lián)的雙方增加)類(lèi)似一對(duì)多情形中的最常用方

2、案,為關(guān)聯(lián)的雙方增加到對(duì)方的外鍵到對(duì)方的外鍵 操作比較簡(jiǎn)單,缺點(diǎn)是會(huì)造成數(shù)據(jù)冗余;操作比較簡(jiǎn)單,缺點(diǎn)是會(huì)造成數(shù)據(jù)冗余;一、實(shí)現(xiàn)一、實(shí)現(xiàn)“多對(duì)多多對(duì)多”的關(guān)聯(lián)映射的原理的關(guān)聯(lián)映射的原理(2 2)新增一張包含關(guān)聯(lián)雙方主鍵的關(guān)聯(lián)表)新增一張包含關(guān)聯(lián)雙方主鍵的關(guān)聯(lián)表 在取數(shù)據(jù)時(shí),需要鏈接該關(guān)聯(lián)表和數(shù)據(jù)表,優(yōu)點(diǎn)是沒(méi)有在取數(shù)據(jù)時(shí),需要鏈接該關(guān)聯(lián)表和數(shù)據(jù)表,優(yōu)點(diǎn)是沒(méi)有數(shù)據(jù)冗余,缺點(diǎn)是帶來(lái)了一定的時(shí)限復(fù)雜度。數(shù)據(jù)冗余,缺點(diǎn)是帶來(lái)了一定的時(shí)限復(fù)雜度。2 2、注意的問(wèn)題、注意的問(wèn)題(1 1)“多對(duì)多多對(duì)多”由于使用了中間數(shù)據(jù)庫(kù)表,在查詢(xún)效率方面比由于使用了中間數(shù)據(jù)庫(kù)表,在查詢(xún)效率方面比較低較低(2 2)并且在對(duì)象

3、模式上,)并且在對(duì)象模式上,“多對(duì)多多對(duì)多”會(huì)使得對(duì)象與對(duì)象之間彼會(huì)使得對(duì)象與對(duì)象之間彼此依賴(lài),因此該種設(shè)計(jì)并不是一個(gè)良好的設(shè)計(jì)方式此依賴(lài),因此該種設(shè)計(jì)并不是一個(gè)良好的設(shè)計(jì)方式(3 3)我們?cè)谙到y(tǒng)的數(shù)據(jù)訪問(wèn)層的設(shè)計(jì)上應(yīng)盡可能避免使用)我們?cè)谙到y(tǒng)的數(shù)據(jù)訪問(wèn)層的設(shè)計(jì)上應(yīng)盡可能避免使用“多多對(duì)多對(duì)多”關(guān)系。關(guān)系。3 3、多對(duì)多的關(guān)聯(lián)也同樣可以采用、多對(duì)多的關(guān)聯(lián)也同樣可以采用SetSet、ListList等多種方式的等多種方式的屬性標(biāo)簽屬性標(biāo)簽4 4、基于中間連接表的多對(duì)多關(guān)聯(lián)的映射文件的示例、基于中間連接表的多對(duì)多關(guān)聯(lián)的映射文件的示例 注意注意標(biāo)簽的定義標(biāo)簽的定義 中間連接表中間連接表1 1、設(shè)計(jì)本

4、示例中所需要的數(shù)據(jù)庫(kù)、設(shè)計(jì)本示例中所需要的數(shù)據(jù)庫(kù)2 2、利用、利用HibernateHibernate連接數(shù)據(jù)庫(kù)連接數(shù)據(jù)庫(kù)(1 1)方式一:采用直接連接)方式一:采用直接連接(2 2)方式二:采用基于容器的)方式二:采用基于容器的JNDIJNDI數(shù)據(jù)源數(shù)據(jù)源 本例采用本例采用TomcatTomcat中所提供的中所提供的JNDIJNDI的數(shù)據(jù)庫(kù)連接池的數(shù)據(jù)庫(kù)連接池二、在二、在WebWeb應(yīng)用中實(shí)現(xiàn)數(shù)據(jù)庫(kù)訪問(wèn)應(yīng)用中實(shí)現(xiàn)數(shù)據(jù)庫(kù)訪問(wèn)4 4、將、將HibernateHibernate的的庫(kù)文件放到庫(kù)文件放到WebWeb應(yīng)用的應(yīng)用的/WEB-/WEB-INF/libINF/lib目錄目錄中中3 3、在、在

5、TomcatTomcat的的server.xmlserver.xml文件進(jìn)行配文件進(jìn)行配置置5 5、配置、配置HibernateHibernate系統(tǒng)系統(tǒng) 本例的本例的XMLXML格式的格式的HibernateHibernate配置文件配置文件hibernate.cfg.xmlhibernate.cfg.xml文文件的內(nèi)容如下件的內(nèi)容如下6 6、配置、配置perties屬性文件屬性文件7 7、在、在WebWeb應(yīng)用所在的目錄中添加應(yīng)用所在的目錄中添加數(shù)據(jù)庫(kù)的數(shù)據(jù)庫(kù)的JDBCJDBC驅(qū)動(dòng)程序的各個(gè)驅(qū)動(dòng)程序的各個(gè)* *.jar.jar包文件包文件8

6、 8、編寫(xiě)、編寫(xiě)POJOPOJO類(lèi)及其要求類(lèi)及其要求(1 1)POJOPOJOp簡(jiǎn)單傳統(tǒng)簡(jiǎn)單傳統(tǒng)JavaJava對(duì)象(對(duì)象(POJO-Plain Old Java ObjectPOJO-Plain Old Java Object,有時(shí)候也稱(chēng)作有時(shí)候也稱(chēng)作Plain Ordinary Java ObjectsPlain Ordinary Java Objects)編程模型)編程模型pHibernateHibernate使用簡(jiǎn)單的使用簡(jiǎn)單的JavaJava對(duì)象來(lái)進(jìn)行持久化。對(duì)象來(lái)進(jìn)行持久化。 (2 2)POJOPOJO類(lèi)代碼的風(fēng)格要求類(lèi)代碼的風(fēng)格要求p一個(gè)一個(gè)POJOPOJO很類(lèi)似于很類(lèi)似于Jav

7、aBeanJavaBean的代碼風(fēng)格的代碼風(fēng)格p并且它應(yīng)該有一個(gè)沒(méi)有參數(shù)的構(gòu)造函數(shù)并且它應(yīng)該有一個(gè)沒(méi)有參數(shù)的構(gòu)造函數(shù)(3 3)實(shí)體類(lèi)中的標(biāo)識(shí)屬性)實(shí)體類(lèi)中的標(biāo)識(shí)屬性 idp實(shí)體類(lèi)中的實(shí)體類(lèi)中的id id 屬性(屬性(propertyproperty) 為一個(gè)實(shí)體類(lèi)的實(shí)例提為一個(gè)實(shí)體類(lèi)的實(shí)例提供標(biāo)識(shí)屬性(供標(biāo)識(shí)屬性(identifier propertyidentifier property)的值)的值p它是一個(gè)特殊的屬性,代表了這個(gè)類(lèi)的數(shù)據(jù)庫(kù)標(biāo)識(shí)符(主它是一個(gè)特殊的屬性,代表了這個(gè)類(lèi)的數(shù)據(jù)庫(kù)標(biāo)識(shí)符(主鍵)鍵)(4 4)本例中的實(shí)體類(lèi)代碼)本例中的實(shí)體類(lèi)代碼(5 5)實(shí)體類(lèi)中的)實(shí)體類(lèi)中的equ

8、alsequals方法方法如果我們有如下需求,則必須重載如果我們有如下需求,則必須重載 equals()equals()方法:方法: p想把持久類(lèi)的實(shí)例放入想把持久類(lèi)的實(shí)例放入SetSet中(當(dāng)中(當(dāng)表示多值關(guān)聯(lián)時(shí),推薦這么做)表示多值關(guān)聯(lián)時(shí),推薦這么做) p想重用脫管實(shí)例想重用脫管實(shí)例 p實(shí)現(xiàn)實(shí)現(xiàn)equals()equals()最顯而易見(jiàn)的方法最顯而易見(jiàn)的方法是比較兩個(gè)對(duì)象標(biāo)識(shí)符的值。如是比較兩個(gè)對(duì)象標(biāo)識(shí)符的值。如果值相同,則兩個(gè)對(duì)象對(duì)應(yīng)于數(shù)果值相同,則兩個(gè)對(duì)象對(duì)應(yīng)于數(shù)據(jù)庫(kù)的同一行,因此它們是相等據(jù)庫(kù)的同一行,因此它們是相等的(如果都被添加到的(如果都被添加到 SetSet,則在,則在Set

9、Set中只有一個(gè)元素)。中只有一個(gè)元素)。 9 9、映射前面所設(shè)計(jì)的、映射前面所設(shè)計(jì)的BookBook數(shù)據(jù)庫(kù)表數(shù)據(jù)庫(kù)表(1 1)映射文件的作用)映射文件的作用pHibernateHibernate需要知道怎樣去加載(需要知道怎樣去加載(loadload)和存儲(chǔ)()和存儲(chǔ)(storestore)我們的持久化類(lèi)的對(duì)象。這里正是我們的持久化類(lèi)的對(duì)象。這里正是HibernateHibernate映射文件映射文件(mapping filemapping file)發(fā)揮作用的地方)發(fā)揮作用的地方p映射文件告訴映射文件告訴HibernateHibernate它應(yīng)該訪問(wèn)數(shù)據(jù)庫(kù)里面的哪個(gè)表它應(yīng)該訪問(wèn)數(shù)據(jù)庫(kù)里面的

10、哪個(gè)表(tabletable)和應(yīng)該使用表里面的哪些字段()和應(yīng)該使用表里面的哪些字段(columncolumn)。)。(2 2)命名規(guī)則:類(lèi)名)命名規(guī)則:類(lèi)名.hbm.xml.hbm.xml(3 3)本示例中的)本示例中的Book.hbm.xmlBook.hbm.xml映射文件的內(nèi)容映射文件的內(nèi)容 1010、編程基于、編程基于HibernateHibernate的的DAODAO組組件以進(jìn)行數(shù)據(jù)的訪件以進(jìn)行數(shù)據(jù)的訪問(wèn)操作問(wèn)操作1111、在某個(gè)、在某個(gè)WebWeb應(yīng)應(yīng)用中使用上面的用中使用上面的程序程序1212、執(zhí)行該、執(zhí)行該WebWeb應(yīng)用應(yīng)用(1 1)將在瀏覽器中看到下面的執(zhí)行結(jié)果)將在瀏覽

11、器中看到下面的執(zhí)行結(jié)果(2 2)同時(shí),在數(shù)據(jù)庫(kù)表中將出現(xiàn)下面的記錄)同時(shí),在數(shù)據(jù)庫(kù)表中將出現(xiàn)下面的記錄三、實(shí)現(xiàn)本例中的三、實(shí)現(xiàn)本例中的“多對(duì)多多對(duì)多”實(shí)體之間的關(guān)聯(lián)實(shí)體之間的關(guān)聯(lián)1 1、在、在MS SQLServerMS SQLServer的本例的數(shù)據(jù)庫(kù)中增加一個(gè)數(shù)據(jù)庫(kù)表的本例的數(shù)據(jù)庫(kù)中增加一個(gè)數(shù)據(jù)庫(kù)表BookAuthorBookAuthor2 2、決定、決定BookAuthorBookAuthor和和BookBook之間的關(guān)系之間的關(guān)系3 3、新增一個(gè)、新增一個(gè)BookAuthorBookAuthor類(lèi)類(lèi) 并且在并且在BookAuthorBookAuthor類(lèi)增加一組類(lèi)增加一組BookBoo

12、k,這樣我們可以輕松的,這樣我們可以輕松的通過(guò)調(diào)用通過(guò)調(diào)用aPerson.getBooks() aPerson.getBooks() 得到一個(gè)得到一個(gè)BookAuthorBookAuthor所擁有的所擁有的BookBook列表,而不必執(zhí)行一個(gè)顯式的查詢(xún)(一個(gè)單向的列表,而不必執(zhí)行一個(gè)顯式的查詢(xún)(一個(gè)單向的Set-basedSet-based關(guān)聯(lián))。關(guān)聯(lián))。 4 4、為該實(shí)體類(lèi)創(chuàng)建一個(gè)、為該實(shí)體類(lèi)創(chuàng)建一個(gè)BookAuthor.hbm.xmlBookAuthor.hbm.xml映射文件映射文件 6 6、在、在HibernateDAOBean.javaHibernateDAOBean.java中增加一個(gè)產(chǎn)生關(guān)聯(lián)數(shù)據(jù)的中增加一個(gè)產(chǎn)生關(guān)聯(lián)數(shù)據(jù)的方法方法5 5、在、在hibernate.cfg.xmlhibernate.cfg.xml配置文件中增加對(duì)配置文件中增加對(duì)該文件的定義該文件的定義7 7、在、在WebWeb應(yīng)用的組件中添加下面的代碼應(yīng)用的組件中添加下面的代碼 8 8、執(zhí)行該組件、執(zhí)行該組件9 9、在、在HibernateDAOBean.javaHi

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論