




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、多對多的實(shí)體映射實(shí)現(xiàn)多對多的實(shí)體映射實(shí)現(xiàn)楊少波楊少波中科院計(jì)算所職業(yè)培訓(xùn)中心中科院計(jì)算所職業(yè)培訓(xùn)中心 多對多的實(shí)體映射實(shí)現(xiàn)多對多的實(shí)體映射實(shí)現(xiàn)在本講您能了解如下知識點(diǎn)在本講您能了解如下知識點(diǎn)q創(chuàng)建創(chuàng)建HibernateHibernate的配置文件。的配置文件。q創(chuàng)建持久化類。創(chuàng)建持久化類。q創(chuàng)建對象創(chuàng)建對象- -關(guān)系映射文件。關(guān)系映射文件。q編程基于編程基于HibernateHibernate的的DAODAO組件組件q實(shí)現(xiàn)實(shí)現(xiàn)“多對多多對多”的關(guān)聯(lián)映射的關(guān)聯(lián)映射1 1、多對多關(guān)聯(lián)的實(shí)現(xiàn)方案、多對多關(guān)聯(lián)的實(shí)現(xiàn)方案(1 1)類似一對多情形中的最常用方案,為關(guān)聯(lián)的雙方增加)類似一對多情形中的最常用方
2、案,為關(guān)聯(lián)的雙方增加到對方的外鍵到對方的外鍵 操作比較簡單,缺點(diǎn)是會造成數(shù)據(jù)冗余;操作比較簡單,缺點(diǎn)是會造成數(shù)據(jù)冗余;一、實(shí)現(xiàn)一、實(shí)現(xiàn)“多對多多對多”的關(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)是沒有在取數(shù)據(jù)時(shí),需要鏈接該關(guān)聯(lián)表和數(shù)據(jù)表,優(yōu)點(diǎn)是沒有數(shù)據(jù)冗余,缺點(diǎn)是帶來了一定的時(shí)限復(fù)雜度。數(shù)據(jù)冗余,缺點(diǎn)是帶來了一定的時(shí)限復(fù)雜度。2 2、注意的問題、注意的問題(1 1)“多對多多對多”由于使用了中間數(shù)據(jù)庫表,在查詢效率方面比由于使用了中間數(shù)據(jù)庫表,在查詢效率方面比較低較低(2 2)并且在對象
3、模式上,)并且在對象模式上,“多對多多對多”會使得對象與對象之間彼會使得對象與對象之間彼此依賴,因此該種設(shè)計(jì)并不是一個(gè)良好的設(shè)計(jì)方式此依賴,因此該種設(shè)計(jì)并不是一個(gè)良好的設(shè)計(jì)方式(3 3)我們在系統(tǒng)的數(shù)據(jù)訪問層的設(shè)計(jì)上應(yīng)盡可能避免使用)我們在系統(tǒng)的數(shù)據(jù)訪問層的設(shè)計(jì)上應(yīng)盡可能避免使用“多多對多對多”關(guān)系。關(guān)系。3 3、多對多的關(guān)聯(lián)也同樣可以采用、多對多的關(guān)聯(lián)也同樣可以采用SetSet、ListList等多種方式的等多種方式的屬性標(biāo)簽屬性標(biāo)簽4 4、基于中間連接表的多對多關(guān)聯(lián)的映射文件的示例、基于中間連接表的多對多關(guān)聯(lián)的映射文件的示例 注意注意標(biāo)簽的定義標(biāo)簽的定義 中間連接表中間連接表1 1、設(shè)計(jì)本
4、示例中所需要的數(shù)據(jù)庫、設(shè)計(jì)本示例中所需要的數(shù)據(jù)庫2 2、利用、利用HibernateHibernate連接數(shù)據(jù)庫連接數(shù)據(jù)庫(1 1)方式一:采用直接連接)方式一:采用直接連接(2 2)方式二:采用基于容器的)方式二:采用基于容器的JNDIJNDI數(shù)據(jù)源數(shù)據(jù)源 本例采用本例采用TomcatTomcat中所提供的中所提供的JNDIJNDI的數(shù)據(jù)庫連接池的數(shù)據(jù)庫連接池二、在二、在WebWeb應(yīng)用中實(shí)現(xiàn)數(shù)據(jù)庫訪問應(yīng)用中實(shí)現(xiàn)數(shù)據(jù)庫訪問4 4、將、將HibernateHibernate的的庫文件放到庫文件放到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ù)庫的數(shù)據(jù)庫的JDBCJDBC驅(qū)動(dòng)程序的各個(gè)驅(qū)動(dòng)程序的各個(gè)* *.jar.jar包文件包文件8
6、 8、編寫、編寫POJOPOJO類及其要求類及其要求(1 1)POJOPOJOp簡單傳統(tǒng)簡單傳統(tǒng)JavaJava對象(對象(POJO-Plain Old Java ObjectPOJO-Plain Old Java Object,有時(shí)候也稱作有時(shí)候也稱作Plain Ordinary Java ObjectsPlain Ordinary Java Objects)編程模型)編程模型pHibernateHibernate使用簡單的使用簡單的JavaJava對象來進(jìn)行持久化。對象來進(jìn)行持久化。 (2 2)POJOPOJO類代碼的風(fēng)格要求類代碼的風(fēng)格要求p一個(gè)一個(gè)POJOPOJO很類似于很類似于Jav
7、aBeanJavaBean的代碼風(fēng)格的代碼風(fēng)格p并且它應(yīng)該有一個(gè)沒有參數(shù)的構(gòu)造函數(shù)并且它應(yīng)該有一個(gè)沒有參數(shù)的構(gòu)造函數(shù)(3 3)實(shí)體類中的標(biāo)識屬性)實(shí)體類中的標(biāo)識屬性 idp實(shí)體類中的實(shí)體類中的id id 屬性(屬性(propertyproperty) 為一個(gè)實(shí)體類的實(shí)例提為一個(gè)實(shí)體類的實(shí)例提供標(biāo)識屬性(供標(biāo)識屬性(identifier propertyidentifier property)的值)的值p它是一個(gè)特殊的屬性,代表了這個(gè)類的數(shù)據(jù)庫標(biāo)識符(主它是一個(gè)特殊的屬性,代表了這個(gè)類的數(shù)據(jù)庫標(biāo)識符(主鍵)鍵)(4 4)本例中的實(shí)體類代碼)本例中的實(shí)體類代碼(5 5)實(shí)體類中的)實(shí)體類中的equ
8、alsequals方法方法如果我們有如下需求,則必須重載如果我們有如下需求,則必須重載 equals()equals()方法:方法: p想把持久類的實(shí)例放入想把持久類的實(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()最顯而易見的方法最顯而易見的方法是比較兩個(gè)對象標(biāo)識符的值。如是比較兩個(gè)對象標(biāo)識符的值。如果值相同,則兩個(gè)對象對應(yīng)于數(shù)果值相同,則兩個(gè)對象對應(yīng)于數(shù)據(jù)庫的同一行,因此它們是相等據(jù)庫的同一行,因此它們是相等的(如果都被添加到的(如果都被添加到 SetSet,則在,則在Set
9、Set中只有一個(gè)元素)。中只有一個(gè)元素)。 9 9、映射前面所設(shè)計(jì)的、映射前面所設(shè)計(jì)的BookBook數(shù)據(jù)庫表數(shù)據(jù)庫表(1 1)映射文件的作用)映射文件的作用pHibernateHibernate需要知道怎樣去加載(需要知道怎樣去加載(loadload)和存儲()和存儲(storestore)我們的持久化類的對象。這里正是我們的持久化類的對象。這里正是HibernateHibernate映射文件映射文件(mapping filemapping file)發(fā)揮作用的地方)發(fā)揮作用的地方p映射文件告訴映射文件告訴HibernateHibernate它應(yīng)該訪問數(shù)據(jù)庫里面的哪個(gè)表它應(yīng)該訪問數(shù)據(jù)庫里面的
10、哪個(gè)表(tabletable)和應(yīng)該使用表里面的哪些字段()和應(yīng)該使用表里面的哪些字段(columncolumn)。)。(2 2)命名規(guī)則:類名)命名規(guī)則:類名.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ù)的訪問操作問操作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ù)庫表中將出現(xiàn)下面的記錄)同時(shí),在數(shù)據(jù)庫表中將出現(xiàn)下面的記錄三、實(shí)現(xiàn)本例中的三、實(shí)現(xiàn)本例中的“多對多多對多”實(shí)體之間的關(guān)聯(lián)實(shí)體之間的關(guān)聯(lián)1 1、在、在MS SQLServerMS SQLServer的本例的數(shù)據(jù)庫中增加一個(gè)數(shù)據(jù)庫表的本例的數(shù)據(jù)庫中增加一個(gè)數(shù)據(jù)庫表BookAuthorBookAuthor2 2、決定、決定BookAuthorBookAuthor和和BookBook之間的關(guān)系之間的關(guān)系3 3、新增一個(gè)、新增一個(gè)BookAuthorBookAuthor類類 并且在并且在BookAuthorBookAuthor類增加一組類增加一組BookBoo
12、k,這樣我們可以輕松的,這樣我們可以輕松的通過調(diào)用通過調(diào)用aPerson.getBooks() aPerson.getBooks() 得到一個(gè)得到一個(gè)BookAuthorBookAuthor所擁有的所擁有的BookBook列表,而不必執(zhí)行一個(gè)顯式的查詢(一個(gè)單向的列表,而不必執(zhí)行一個(gè)顯式的查詢(一個(gè)單向的Set-basedSet-based關(guān)聯(lián))。關(guān)聯(lián))。 4 4、為該實(shí)體類創(chuàng)建一個(gè)、為該實(shí)體類創(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配置文件中增加對配置文件中增加對該文件的定義該文件的定義7 7、在、在WebWeb應(yīng)用的組件中添加下面的代碼應(yīng)用的組件中添加下面的代碼 8 8、執(zhí)行該組件、執(zhí)行該組件9 9、在、在HibernateDAOBean.javaHi
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年企業(yè)戰(zhàn)略變革試題及答案
- 偽隨機(jī)數(shù)生成考試考題及答案
- 抖音雙十一活動(dòng)策劃方案
- 2025年云計(jì)算應(yīng)用考試試題及答案
- 計(jì)算機(jī)技術(shù)員考試試題及答案概述
- 項(xiàng)目合同協(xié)議書
- 新疆出入境邊防檢查總站所屬事業(yè)單位2025年度公開招聘筆試和合格分?jǐn)?shù)線筆試歷年典型考題及考點(diǎn)剖析附帶答案詳解
- 公共關(guān)系技巧的訓(xùn)練計(jì)劃
- 行政法學(xué)的評估標(biāo)準(zhǔn)及試題及答案
- 網(wǎng)絡(luò)問題識別與試題及答案
- 林下經(jīng)濟(jì)產(chǎn)業(yè)項(xiàng)目可行性研究報(bào)告
- 《深入了解中信建投》課件
- 2025年全民營養(yǎng)周科學(xué)實(shí)現(xiàn)吃動(dòng)平衡健康中國營養(yǎng)先行課件
- 鍵盤采購合同協(xié)議
- 銀泰證券公司融資融券業(yè)務(wù)方案設(shè)計(jì)
- 2025年高校教師崗前培訓(xùn)《高等教育學(xué)》考試模擬試卷及答案(共五套)
- 湖南省張家界市慈利縣實(shí)驗(yàn)高中-奮進(jìn)關(guān)鍵期跨越分水嶺-高二下開學(xué)家長會【課件】
- 2025年湖北省建設(shè)投資集團(tuán)有限公司招聘筆試參考題庫含答案解析
- 2025年中國證券融資融券行業(yè)市場調(diào)查研究及投資前景預(yù)測報(bào)告
- 魚躍前滾翻單元計(jì)劃-2024-2025學(xué)年人教版體育與健康六年級上冊
- DB32∕T 525-2010 學(xué)生公寓用紡織品
評論
0/150
提交評論