教學(xué)電子課件使用hibernate開(kāi)發(fā)租房系統(tǒng)_第1頁(yè)
教學(xué)電子課件使用hibernate開(kāi)發(fā)租房系統(tǒng)_第2頁(yè)
教學(xué)電子課件使用hibernate開(kāi)發(fā)租房系統(tǒng)_第3頁(yè)
教學(xué)電子課件使用hibernate開(kāi)發(fā)租房系統(tǒng)_第4頁(yè)
教學(xué)電子課件使用hibernate開(kāi)發(fā)租房系統(tǒng)_第5頁(yè)
已閱讀5頁(yè),還剩29頁(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、Hibernate 關(guān)聯(lián)映射第二章回顧與作業(yè)點(diǎn)評(píng)Hibernate的基本原理?Hibernate的優(yōu)勢(shì)?使用Hibernate操作數(shù)據(jù)庫(kù)的步驟?實(shí)體對(duì)象的三種狀態(tài)?預(yù)習(xí)檢查如何配置單向一對(duì)多關(guān)聯(lián)關(guān)系?如何配置單向多對(duì)一關(guān)聯(lián)關(guān)系?如何配置雙向一對(duì)多關(guān)聯(lián)關(guān)系?cascade屬性和inverse屬性的作用和區(qū)別?如何配置多對(duì)多關(guān)聯(lián)關(guān)系?本章任務(wù)完善租房網(wǎng)系統(tǒng):實(shí)現(xiàn)街道和區(qū)的關(guān)聯(lián)管理實(shí)現(xiàn)租房信息的發(fā)布本章目標(biāo)掌握many-to-one關(guān)聯(lián)掌握one-to-many關(guān)聯(lián)掌握many-to-many關(guān)聯(lián)實(shí)體關(guān)聯(lián)關(guān)系實(shí)體之間的關(guān)系關(guān)聯(lián)關(guān)系通過(guò)一個(gè)對(duì)象持有另一個(gè)對(duì)象的實(shí)例泛化關(guān)系通過(guò)對(duì)象之間的繼承方法來(lái)實(shí)現(xiàn)類

2、與類之間最普遍的關(guān)系就是關(guān)聯(lián)關(guān)系在UML 語(yǔ)言中,關(guān)聯(lián)是有方向的單向多對(duì)一關(guān)聯(lián)在類與類之間各種各樣的關(guān)系中,多對(duì)一的單向關(guān)聯(lián)關(guān)系和關(guān)系數(shù)據(jù)庫(kù)中的外鍵參照關(guān)系最匹配單向多對(duì)一關(guān)聯(lián)是最常見(jiàn)的單向關(guān)聯(lián)關(guān)系在租房系統(tǒng)中從街道到區(qū)的關(guān)聯(lián)就是典型的多對(duì)一關(guān)聯(lián)租房系統(tǒng)中街道和區(qū)的實(shí)體類public class District implements java.io.Serializable private Long id; private String name; /* 默認(rèn)的構(gòu)造方法 */ public District() /省略setter/getter方法區(qū)public class Street i

3、mplements java.io.Serializable private Long id; private District district; private String name; /* 默認(rèn)的構(gòu)造方法 */ public Street() public District getDistrict() return this.district; public void setDistrict(District district) this.district = district; / 省略部分setter/getter方法街道租房系統(tǒng)中街道和區(qū)的映射文件 District.hbm.xm

4、l Street.hbm.xml與Street 對(duì)應(yīng)的street 表是通過(guò)district_id 的值關(guān)聯(lián)至district 表的設(shè)置關(guān)系的字段設(shè)置關(guān)系的對(duì)象many-to-one元素常用屬性many-to-one 元素的常用屬性屬性含義和作用必須默認(rèn)值name映射類屬性的名稱 Yclass關(guān)聯(lián)類的完全限定名Ncolumn關(guān)聯(lián)的字段Nnot-null設(shè)置關(guān)聯(lián)的字段的值是否可以為空Nfalselazy指定關(guān)聯(lián)對(duì)象是否使用延遲加載以及延遲加載的策略Nproxyfetch設(shè)置抓取數(shù)據(jù)的策略Nselect配置映射文件并測(cè)試hibernate.cfg.xml中指定映射文件測(cè)試 District dis

5、trict = new District();Street street1 = new Street();Street street2 = new Street();Street street3 = new Street();district.setName(豐臺(tái)); /設(shè)置區(qū)的名稱street1.setName(廣安路); /設(shè)置街道名稱street1.setDistrict(district); /設(shè)置街道所在區(qū)street2.setName(大紅門路);street2.setDistrict(district);street3.setName(南苑路);street3.setDistri

6、ct(district);設(shè)置街道和區(qū)SessionFactory sessionFactory = null;Session session = null;Transaction tx= null;try sessionFactory = new Configuration().configure().buildSessionFactory(); session = sessionFactory.openSession(); tx= session.beginTransaction(); session.save(district); session.save(street1); sessi

7、on.save(street2); session.save(street3); mit();catch (HibernateException e) tx.rollback(); e.printStackTrace(); finally session.close(); sessionFactory.close();添加街道和區(qū)指導(dǎo)實(shí)現(xiàn)單向多對(duì)一關(guān)聯(lián)關(guān)系訓(xùn)練要點(diǎn)Hibernate配置文件配置ORM 映射文件配置雙向一對(duì)多關(guān)聯(lián)需求說(shuō)明實(shí)現(xiàn)區(qū)和街道關(guān)聯(lián)關(guān)系實(shí)現(xiàn)思路編寫(xiě)實(shí)體類。在Street類中設(shè)置District屬性編寫(xiě)ORM 映射文件修改Hibernate 配置文件根據(jù)需求編寫(xiě)業(yè)務(wù)類和Dao類

8、,并進(jìn)行測(cè)試完成時(shí)間:15分鐘共性問(wèn)題集中講解常見(jiàn)調(diào)試問(wèn)題及解決辦法代碼規(guī)范問(wèn)題共性問(wèn)題集中講解單向一對(duì)多關(guān)聯(lián)由“一” 的一端加載“多” 的一端,關(guān)系由“一”的一端來(lái)維護(hù)在JavaBean中是在“一”的一端中持有“多”的一端的集合Hibernate把這種關(guān)系反映到數(shù)據(jù)庫(kù)的策略是在“多”的一端的表上加一個(gè)外鍵指向“一”的一端的表在“一”的一端維護(hù)關(guān)系是不提倡的將“多”的一端的外鍵添加非空約束,導(dǎo)致數(shù)據(jù)不能插入插入數(shù)據(jù)效率降低實(shí)體類public class Street implements java.io.Serializable private Long id; private Long di

9、strict_id; private String name; /* 默認(rèn)的構(gòu)造方法 */ public Street() / 省略部分setter/getter方法 public Long getDistrict_id() return district_id; public void setDistrict_id(Long district_id) this.district_id = district_id; 街道實(shí)體類public class District implements java.io.Serializable private Long id; private String

10、 name; private Set streets = new HashSet(); /* 默認(rèn)的構(gòu)造方法 */ public District() / 省略部分setter/getter方法 public Set getStreets() return this.streets; public void setStreets(Set streets) this.streets = streets; 區(qū)實(shí)體類映射文件 Street.hbm.xml District.hbm.xml設(shè)置關(guān)系的字段設(shè)置關(guān)系的對(duì)象使用set元素和one-to-many元素配置一對(duì)多關(guān)聯(lián)使用set元素和one-to-

11、many元素配置一對(duì)多關(guān)聯(lián)set元素的常用屬性set元素的常用屬性屬性含義和作用必須默認(rèn)值name映射類屬性的名稱 Ytable關(guān)聯(lián)類的目標(biāo)數(shù)據(jù)庫(kù)表Nlazy指定關(guān)聯(lián)對(duì)象是否使用延遲加載以及延遲加載的策略Nproxyfetch設(shè)置抓取數(shù)據(jù)的策略Nselect修改測(cè)試類檢查結(jié)果hibernate.cfg.xml中指定映射文件測(cè)試 District district = new District();Street street1 = new Street();Street street2 = new Street();Street street3 = new Street();district.s

12、etName(海淀);street1.setName(中關(guān)村大街);street2.setName(知春路);street3.setName(學(xué)院路);district.getStreets().add(street1);district.getStreets().add(street2);district.getStreets().add(street3);設(shè)置街道和區(qū)SessionFactory sessionFactory = null;Session session = null;Transaction tx= null;try sessionFactory = new Configu

13、ration().configure().buildSessionFactory(); session = sessionFactory.openSession(); tx= session.beginTransaction(); session.save(street1); session.save(street2); session.save(street3); session.save(district); mit();catch (HibernateException e) tx.rollback(); e.printStackTrace(); finally session.clos

14、e(); sessionFactory.close();添加街道和區(qū)雙向一對(duì)多關(guān)聯(lián)單向一對(duì)多單向多對(duì)一同時(shí)配置兩者就成了雙向一對(duì)多關(guān)聯(lián)指導(dǎo)實(shí)現(xiàn)雙向一對(duì)多關(guān)聯(lián)關(guān)系訓(xùn)練要點(diǎn)Hibernate配置文件的配置ORM 映射文件的配置雙向一對(duì)多關(guān)聯(lián)需求說(shuō)明實(shí)現(xiàn)區(qū)和街道的關(guān)聯(lián)關(guān)系實(shí)現(xiàn)思路編寫(xiě)實(shí)體類在Street類中設(shè)置District屬性在District 類中設(shè)置Set 屬性用于保存包含的Street編寫(xiě)ORM 映射文件修改Hibernate 配置文件根據(jù)需求編寫(xiě)業(yè)務(wù)類和Dao類,并進(jìn)行測(cè)試完成時(shí)間:30分鐘共性問(wèn)題集中講解常見(jiàn)調(diào)試問(wèn)題及解決辦法代碼規(guī)范問(wèn)題共性問(wèn)題集中講解小結(jié)如何配置單向一對(duì)多關(guān)聯(lián)關(guān)系?

15、如何配置單向多對(duì)一關(guān)聯(lián)關(guān)系?如何配置雙向一對(duì)多關(guān)聯(lián)關(guān)系?cascade屬性當(dāng)設(shè)置了cascade屬性不為none時(shí),Hibernate 會(huì)自動(dòng)持久化所關(guān)聯(lián)的對(duì)象cascade 屬性的設(shè)置會(huì)帶來(lái)性能上的變動(dòng),需謹(jǐn)慎設(shè)置Cascade屬性值屬性值含義和作用all對(duì)所有操作進(jìn)行級(jí)聯(lián)操作save-update執(zhí)行保存和更新操作時(shí)進(jìn)行級(jí)聯(lián)操作delete執(zhí)行刪除操作時(shí)進(jìn)行級(jí)聯(lián)操作none對(duì)所有操作不進(jìn)行級(jí)聯(lián)操作inverse屬性術(shù)語(yǔ)“inverse”直譯為“反轉(zhuǎn)”在Hibernate 中,inverse屬性指定了關(guān)聯(lián)關(guān)系中的方向關(guān)聯(lián)關(guān)系中,inverse=false 的為主動(dòng)方,由主動(dòng)方負(fù)責(zé)維護(hù)關(guān)聯(lián)關(guān)系

16、在一對(duì)多關(guān)聯(lián)中,將one 方的inverse 設(shè)置為true,這將有助性能的改善inverse指的是關(guān)聯(lián)關(guān)系的控制方向,而cascade指的是層級(jí)之間的連鎖操作練習(xí)cascade和inverse的使用訓(xùn)練要點(diǎn)cascade屬性的使用inverse屬性的使用需求說(shuō)明使用cascade和inverse 優(yōu)化區(qū)和街道關(guān)聯(lián)關(guān)系完成時(shí)間:20分鐘共性問(wèn)題集中講解常見(jiàn)調(diào)試問(wèn)題及解決辦法代碼規(guī)范問(wèn)題共性問(wèn)題集中講解多對(duì)多關(guān)聯(lián)案例分析2-1某OA系統(tǒng)需要完成的功能列出項(xiàng)目的參加人員列出某個(gè)人參加的所有項(xiàng)目多對(duì)多關(guān)聯(lián)案例分析2-2對(duì)雇員和項(xiàng)目需要?jiǎng)?chuàng)建兩個(gè)表:employee 和project雇員和項(xiàng)目間是典型的多對(duì)多關(guān)系多對(duì)多關(guān)聯(lián) Project 一方的配置Employee 一方的配置練習(xí)實(shí)現(xiàn)租房信息的發(fā)

溫馨提示

  • 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)論