版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、繼承關(guān)系樹中的每個(gè)具體類對(duì)應(yīng)一個(gè)表的實(shí)現(xiàn)示例1、實(shí)現(xiàn)的基本原理-把每個(gè)具體類映射到一張表是最簡單的映射方式(1)問題下面以人事管理系統(tǒng)中的人員繼承關(guān)系映射問題作為示例來加以說明,如下圖所示。在關(guān)系數(shù)據(jù)模型中我們需定義Companines、Hourly_Employees和Salaried_Employees三張數(shù)據(jù)庫表。把 Salaried_Employees 表簡稱為 SE 表。為了敘述的方便,下文把Hourly_Employees表簡稱為HE表,iti畛 LiLi-iL-ai.auac:-貿(mào) DataBase號(hào)關(guān)系圖二1表色 視圖耳存儲(chǔ)過程電用戶密角色J規(guī)則二I跋認(rèn)r用戶定義的數(shù)據(jù)類型 思
2、用戶定義的函數(shù) 宣全文目錄+ 甘 HDataBase+ 劇 master+ 期 model+ 劇 msdbI_| booKAutnordbofflrZUUb-y- lU:Jb:Zb回 CARDdbo用戶2006-9-4 10:36:26回縹dbo國尸四快:距Ijcorripaninesdbo用戶2006-9-4 10:36:26J dtpropertiesdbo系統(tǒng)2006-9-4 10:36:39EBookdbo用戶2006-9-4 10:36:26駕 Fileinfodbo用戶2006-9-4 10:36:26FileInfo_Listdbo用戶2006-10-26 11:08:51Fil
3、eInfo_Mapdbo用戶2006-10-26 13:38:09FileUserlnfodbo用戶2口|。6-勺-4 1 口滂 HOURL_EMPLOEE5dbo用戶2006-9-4 10:36:26Hl MailUserlnFodbo用戶2006-9-4 10:36:26Hl PERSONdbo用戶2006-9-4 10:36:26| Publishdbo用戶2口|。6-勺-4 1 口滂SALARIED_EMPLOYEE5dbo用戶2006-9-4 10:36:26|ElsomeUserdbo用戶2006-9-4 10:36:26(2)映射方式我們的持久類ourlyEmployee類和HE
4、表對(duì)應(yīng),HourlyEmployee類本身的rate屬性,以及從Employee 類中繼承的id屬性和name屬性,在HE表中都有對(duì)應(yīng)的字段。此外,HourlyEmployee類繼承了 Employee 類與Company類的關(guān)聯(lián)關(guān)系,與此對(duì)應(yīng),在HE表中定義了參照Companines表的COMPANY_ID外鍵。SalariedEmployee類和SE表對(duì)應(yīng),SalariedEmployee類本身的salary屬性,以及從Employee類中繼承 的id屬性和name屬性,在SE表中都有對(duì)應(yīng)的字段。此外,SalariedEmployee類繼承了 Employee類與 Company類的關(guān)聯(lián)關(guān)
5、系,與此對(duì)應(yīng),在SE表中定義了參照COMPANIES表的COMPANY_ID外鍵。2、Companines表的設(shè)計(jì)(1)Companines 表的結(jié)構(gòu)列名數(shù)據(jù)類型長度允許空固int4n:diri env:f ch:=Lf50(2)Companines表中的數(shù)據(jù)四|祗巨亟直|呼| 矮明|以攵I家匡IDTL:=ifTiH1ICTAC2EilfghtdEghfilE13、HOURLY_EMPLOYEES (HE)表的設(shè)計(jì)(1) hourLY_employees (皿)表的結(jié)構(gòu)aT僉I若是疆|能鸛邙髓|呷或回列名數(shù)據(jù)類型長度允許空id|int4C ump:dTiylllint4N:dIT|Hnvar
6、char50Ratefluat8(2) HOURLY_EMPLOYEES (HE)表中的數(shù)據(jù)4、SALARIED_EMPLOYEES (SE )表的設(shè)計(jì)(1) salariED_employees (SE)表的結(jié)構(gòu)I&U 昭峪|件I酯鷺邙騷|吒玷回列名數(shù)據(jù)類型長度允許空id|int4C ump:inylDint4N:dITieriv:f i:h:=Lf50s al :i-yfloat8(2) SALARIED_EMPLOYEES (SE)表中的數(shù)據(jù)巨口亟宜聲!矮眇|斜斜職匡IDComp:=iTLyIIlILdiTiee :=il :=Lt_y11li40021W:ilLg6005、設(shè)計(jì)各個(gè)持久
7、化(1) Company 類 package examples; public class Company ( private int id; private String name; public Company() ( public int getId() ( return id;private void setId(int id) ( this.id = id;public String getName() ( return name;public void setName(String name) ( = name;public boolean equals(Object other)
8、 (if (this = other) (return true;if (! (other instanceof Company) (return false;return true;Employee 類package examples;public abstract class Employeepublic Employee() private int id;public int getId() return id;private void setId(int id) this.id = id;private String name;public String getName() retur
9、n name;public void setName(String name) = name;private Company company;由于 Employee 類與 Company 類存在“一對(duì)一”的關(guān)系public Company getCompany() return company;public void setCompany(Company company) pany = company;public abstract void work(String content);由于Employee類為抽象類HourlyEmployee類package examples;public c
10、lass HourlyEmployee extends Employeepublic HourlyEmployee() private float rate;public float getRate() return rate;public void setRate(float rate) this.rate = rate;public boolean equals(Object other) if (this = other) return true;if (! (other instanceof HourlyEmployee) return false;return true;public
11、 void work(String content)(3) SalariedEmployee類package examples;public class SalariedEmployee extends Employeepublic SalariedEmployee() private float salary;public float getSalary() return salary;public void setSalary(float salary) this.salary = salary;public boolean equals(Object other) if (this =
12、other) return true;if (! (other instanceof SalariedEmployee) return false;return true;public void work(String content)6、為每個(gè)數(shù)據(jù)庫表建立映射文件(1)各個(gè)映射文件之間的關(guān)系Company類、HourlyEmployee類和SalariedEmployee類都有相應(yīng)的映射文件,而Employee類沒有相 應(yīng)的映射文件。下圖顯示了持久化類、映射文件和數(shù)據(jù)庫表之間的對(duì)應(yīng)關(guān)系。注意:如果Employee類不是抽象類,即Employee類本身也能被實(shí)例化,此時(shí)應(yīng)該采用我們后面所要講到
13、的 第三種方式來加以實(shí)現(xiàn)請(qǐng)見后面的說明。那么我們還需要為Employee類創(chuàng)建對(duì)應(yīng)的EMPLOYEES表,此時(shí)HE表和SE表的結(jié)構(gòu)仍然和上面 圖中所示的一樣。這意味著在EMPLOYEES表、HE表和SE表中都定義了相同的NAME字段以及參照 COMPANIES 表的外鍵 COMPANYID。另外,還需為Employee類創(chuàng)建單獨(dú)的Employee.hbm.xml文件。(2)創(chuàng)建映射文件Company.hbm.xml新建 Company.hbm.xml 文件JO BinMem口 EdipseJ25EApp-“爵 HWebMapping臼? .myedipse-& src-m examples文件
14、創(chuàng)建新文件資源。Jl BankUser.javaJl Book, javaJl BookAuthor.iaJ Card.javaCat. javaEBook, javaEmail.javaHibernateDAOEHibernateDAOIHibernateUtil.jcPerson, java輸入或選擇父文件夾(少: |HWebMapping/src昏e 0-噂 HWebMapping_ .myedipse+ & src+ & WebRoot7 Publish.java 7 UserInFo_Li5t.j. UserInFo_Map. 7 UserInFo_5et.j.交件名(州):(Com
15、pany.hbm.xmlJj Userinfo.java EiankUser.hbm.xml Book.hbm.xml BookAuthor.hbm.xi Card. hbm. xml Cat.hbm.xml FRrink.hhm.yml該文件的內(nèi)容如下注意:該方法的主要缺點(diǎn)是不支持多態(tài)關(guān)聯(lián)。從Company類到Employee類是多態(tài)關(guān)聯(lián),但是由于關(guān)系數(shù)據(jù)模型沒有描述Employee類和它的兩個(gè) 子類的繼承關(guān)系,因此無法映射Company類的employees集合。因此,在上面的Company.hbm.xml文件中 僅僅映射了 Company類的id和name屬性。(3)創(chuàng)建映射文件Hour
16、lyEmployee.hbm.xml 文件用于把HourlyEmployee類映射到HE表,在這個(gè)映射文件中,除了需要映射HourlyEmployee類本身 的rate屬性,還需要映射從Employee類中繼承的name屬性,此外還要映射從Employee類中繼承的與 Company類的關(guān)聯(lián)關(guān)系。新建 HourlyEmployee.hbm.xml 文件return files;I BinMem口 EdipseJ25EApp ? HWebMapping ,白.myedipse-Lzh src-矽 examples J BankUser.javc17 Book, java7 BookAuthorJ
17、c7 Card.java Cat.java EBook.java Email.java HibernateDAC HibernateDAC HibernateUtil.: Person, java Publish.java U5erInFo_Li5t. U5erInFo_Map U5erInFo_5et.電新建文件文件創(chuàng)建新文件資源。輸入或選擇父文件夾(鳥: |HWebMapping/src100T歸 HWebMapping9 .myedipse+ 9 src+ 0 WebRoot文件名(匝):|HourlyEmployee.hbm.xml高魏由7 UserlnFo.java BankUser
18、. hbm.xm Book. hbm.xml BookAuthor.hbm.; Card.hbm.xml Cat. hbm. xml Company.hbm.xm EBook, hbm. xml hibernate, cfg. xml lnn4i.nrnnftrHft該文件的內(nèi)容如下注意:其中的標(biāo)簽主要是為了實(shí)現(xiàn)“EmployeeCompany”的“一對(duì)一”的關(guān)聯(lián)映射。(4)創(chuàng)建映射文件SalariedEmployee.hbm.xml 文件用于把SalariedEmployee類映射到SE表,在這個(gè)映射文件中,除了需要映射SalariedEmployee類本身 的salary屬性,還需要映射從
19、Employee類中繼承的name屬性,此外還要映射從Employee類中繼承的與 Company類的關(guān)聯(lián)關(guān)系。I | BinMem口 EdipseJ25EApp-“1 HWebMapping 臼? .myedipse -& src-跨 examplesJ BankUser.java Book.iava BcicikAuthcir,間 Card.java Cat.java EBook.java 囚 Email.java 7 HibernateDAOE ,J, HibernateDAO T| HibernateUtil.j ,J, Person.java T| Publish.java T| U
20、serInfo_List.j ,J, UserInfo_Map. T| Userlnfo_5et.j ,J, Userinfo.java BankUser. hbm. xml Book.hbm.xml BookAuthor.hbm.x Card.hbm.xml Cat.hbm.xml Company, hbm. xml CO.-.1. J.J.LL. ,.LL.I新建文件1r|HWebMapping/src壽O O-H HWebMapping 昌.myedipse +I-& src + & WebRoot文件名|5alariedEmployee.hbm.xml高魏與 該文件的內(nèi)容如下注意:其中
21、的標(biāo)簽主要是為了實(shí)現(xiàn)“EmployeeCompany”的“一對(duì)一”的關(guān)聯(lián)映射。(5)在hibernate.cfg.xml文件中增加對(duì)這些文件的關(guān)聯(lián)每 +hibernate.cfg.xmlx HourlyEmployee.hb.i SalariedEmployeeW12java: c omp/ env/ j db c/ dat as our c etrueres our 06= EBook, hbm. Kml,T/resour06=Publish, hbm.:mappingmappingmappingmappingmappingresource=BookAuthor. hbm. Kml,v/ma
22、pping resource=,TUserInf o. hbm.:mapping resource=,TUserInf o_Set. hbm. xml/mapping resource=,TUserInf o_List. hbm. xml/mappinE rEmciurcE=UmErInf n_Map. hbm. xml/ 口口inE rEmciurcen SalariedmplciyEE. hbm. xml/7、在我們的DAO組件類HibernateDAOBean中提供操縱持久對(duì)象的數(shù)據(jù)訪問方法(1)增加一個(gè) doFindAllEmployees 方法public boolean doFin
23、dAllEmployees。throwsHibernateException List results = new ArrayList();try session = HibernateUtil.currentSession();tx = session.beginTransaction();List hourlyEmployees = session.createQuery(from HourlyEmployee).list();results.addAll(hourlyEmployees);List salariedEmployees = session.createQuery(from
24、SalariedEmployee).list();results.addAll(salariedEmployees);printAllEmployeeInfo(results);mit();catch (HibernateException he) log.error(在 doSelectBookDataFromDB 方法中出現(xiàn)了 HibernateException 錯(cuò)誤”,he);throw he;finally HibernateUtil.closeSession();return true;public void printAllEmployeeInfo(java.util.List
25、allEmplyList)java.util.Iterator iterator=allEmplyList.iterator();while(iterator.hasNext()examples.Employee oneEmployee=(examples.Employee)iterator.next();if(oneEmployee instanceof examples.HourlyEmployee)int companyID=(examples.HourlyEmployee)oneEmployee).getCompany().getId();String companyName=(exa
26、mples.HourlyEmployee)oneEmployee).getCompany().getName();int HEmployeeID=(examples.HourlyEmployee)oneEmployee).getId();String name=(examples.HourlyEmployee)oneEmployee).getName();float rate=(examples.HourlyEmployee)oneEmployee).getRate();System.out.print(companyID=+companyID+t);System.out.print(comp
27、anyName=+companyName+t);System.out.print(HEmployeeID=+HEmployeeID+t);System.out.print(name=+name+t);System.out.print(rate=+rate+n);elseint companyID=(examples.SalariedEmployee)oneEmployee).getCompany().getId();String companyName=(examples.SalariedEmployee)oneEmployee).getCompany().getName();int SEmp
28、loyeeID=(examples.SalariedEmployee)oneEmployee).getId();String name=(examples.SalariedEmployee)oneEmployee).getName();float salary=(examples.SalariedEmployee)oneEmployee).getSalary();System.out.print(companyID=n+companyID+ntn);System.out.print(companyName=+companyName+t);System.out.print(SEmployeeID
29、=+SEmployeeID+t);System.out.print(name=+name+t);System.out.print(salary=+salary+n);(2)在index.jsp中訪問DAO方法8、執(zhí)行該 Web 應(yīng)用(http:127001:8080/HWebMapping/index.jsp)lb: 1 Ei: 594W1 IMbO iziessiorihactorytjbject?actorj: 8X - Wot binding factorj to JWD1= no JPJD1 naiR巳 conf igured 15: 16: 59j 484 INFO SessionF
30、actorylmp 1:353 - Checking 0 rL:3ined HQL queries IS: 16: 59S31 IMFO 口nF:ac:t口rylm口 1: 3T3 th巳eking: U Hamed W4L queries:Hibernat e: select hourlyemplO_. ID Hibernat e: select salariedemLl_. ID Hibernate: select conp:myO_. ID as ci:imp:inyID: ci:imp:inyID comp:ifLyID c ump any ID1111CQJTLpanyNam 已 c
31、omp:dnyN:iiTLe EmpanyUajr詬 companyN:iiTLeICT ACICT ACICT ACICT ACas ID 17_j hourlyemp10_. Marne as Marne 17_, hourlyemp10_. Rate as Rate17_s hourlyemp10_. Companyl as ID 18_j salariedeniLl_. N:djrie as N:djrie 18_., salariedemLI_. salary as salary 18_., s al ar i e deml_. Comp| ID 16_0_j conp:myO_.
32、n:iTLe as n:iTLe 16_0_ from Cdmijamn巳蘭 company。_ where company。. -TTVHEmployeelD:HEmployeelDSEmployeelDSEmployeelD9、體驗(yàn)Hibernate中l(wèi)azy技術(shù)lb: ziy: Utij blM IPJbCi essionbact ory 1 mpi: bJ - Checking U n:djried HRL queries IS: 2!8: 口旗 64i IMFO 5巳口rvlmpl: 3T3 匚heciiig: D named W4L 口ueri巳三 iii _如果將對(duì)Company
33、表的訪問代碼(也就是上面的黑體部分)除掉,然后再次執(zhí)行,將發(fā)現(xiàn)沒有對(duì) Company表進(jìn)行查詢,因?yàn)镠ibernate缺省時(shí)是采用lazy加載的。只在真正需要該數(shù)據(jù)時(shí),才加載所關(guān)聯(lián) 的數(shù)據(jù)。ibernate: select hLiurljemplO_. ID as ID 1 hourlyemplO_. N:ime as N:irLe 17_s huurlyemp 10_. Rate as Rat e 1hourlyemp 10_. CDmpanyI| :ibernat e:EmployeeIDEmployeeIDSEmployeelD10、在doFindAllEmployees方法中增加保存數(shù)據(jù)的代碼(1)代碼示例public boolean doFindAllEmployees。throwsHibernateException (List
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 液壓課程設(shè)計(jì)理念是什么
- 煉鐵課程設(shè)計(jì)怎么寫
- 紅外平行光管課程設(shè)計(jì)
- 簡便方式計(jì)算課程設(shè)計(jì)
- 物聯(lián)網(wǎng)網(wǎng)絡(luò)編程課程設(shè)計(jì)
- 田忌賽馬算法課程設(shè)計(jì)
- 圖安課程設(shè)計(jì)
- 礦井課程設(shè)計(jì)總結(jié)
- 2024河南省安全員考試題庫及答案
- 植物造景技術(shù)課程設(shè)計(jì)
- 2020年會(huì)計(jì)繼續(xù)教育完整考試題庫1000題(答案)
- 倉庫安全培訓(xùn)
- 《物業(yè)客服培訓(xùn)教程》課件
- 內(nèi)審和管理評(píng)審培訓(xùn)課件
- 2024年湖北省公務(wù)員錄用考試《行測》真題及答案解析
- 自然辯證法習(xí)題及答案
- 特色農(nóng)產(chǎn)品超市方案
- 2024國有企業(yè)與民營企業(yè)之間的混合所有制改革合同
- 二次函數(shù)的幾何性質(zhì)(于特)(1)名師公開課獲獎(jiǎng)?wù)n件百校聯(lián)賽一等獎(jiǎng)?wù)n件
- GB/T 30595-2024建筑保溫用擠塑聚苯板(XPS)系統(tǒng)材料
- 2024年人教版八年級(jí)地理上冊(cè)期末考試卷(附答案)
評(píng)論
0/150
提交評(píng)論