![人事管理系統(tǒng)中的人員繼承關(guān)系映射示例_第1頁(yè)](http://file4.renrendoc.com/view/4ed0ebf816e788869fd8d36f8bd48e37/4ed0ebf816e788869fd8d36f8bd48e371.gif)
![人事管理系統(tǒng)中的人員繼承關(guān)系映射示例_第2頁(yè)](http://file4.renrendoc.com/view/4ed0ebf816e788869fd8d36f8bd48e37/4ed0ebf816e788869fd8d36f8bd48e372.gif)
![人事管理系統(tǒng)中的人員繼承關(guān)系映射示例_第3頁(yè)](http://file4.renrendoc.com/view/4ed0ebf816e788869fd8d36f8bd48e37/4ed0ebf816e788869fd8d36f8bd48e373.gif)
![人事管理系統(tǒng)中的人員繼承關(guān)系映射示例_第4頁(yè)](http://file4.renrendoc.com/view/4ed0ebf816e788869fd8d36f8bd48e37/4ed0ebf816e788869fd8d36f8bd48e374.gif)
![人事管理系統(tǒng)中的人員繼承關(guān)系映射示例_第5頁(yè)](http://file4.renrendoc.com/view/4ed0ebf816e788869fd8d36f8bd48e37/4ed0ebf816e788869fd8d36f8bd48e375.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、繼承關(guān)系樹(shù)中的每個(gè)具體類對(duì)應(yīng)一個(gè)表的實(shí)現(xiàn)示例1、實(shí)現(xiàn)的基本原理-把每個(gè)具體類映射到一張表是最簡(jiǎn)單的映射方式(1)問(wèn)題下面以人事管理系統(tǒng)中的人員繼承關(guān)系映射問(wèn)題作為示例來(lái)加以說(shuō)明,如下圖所示。在關(guān)系數(shù)據(jù)模型中我們需定義Companines、Hourly_Employees和Salaried_Employees三張數(shù)據(jù)庫(kù)表。把 Salaried_Employees 表簡(jiǎn)稱為 SE 表。為了敘述的方便,下文把Hourly_Employees表簡(jiǎn)稱為HE表,iti畛 LiLi-iL-ai.auac:-貿(mào) DataBase號(hào)關(guān)系圖二1表色 視圖耳存儲(chǔ)過(guò)程電用戶密角色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國(guó)尸四快:距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ù)類型長(zhǎng)度允許空固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ù)類型長(zhǎng)度允許空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ù)類型長(zhǎng)度允許空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ù)庫(kù)表建立映射文件(1)各個(gè)映射文件之間的關(guān)系Company類、HourlyEmployee類和SalariedEmployee類都有相應(yīng)的映射文件,而Employee類沒(méi)有相 應(yīng)的映射文件。下圖顯示了持久化類、映射文件和數(shù)據(jù)庫(kù)表之間的對(duì)應(yīng)關(guān)系。注意:如果Employee類不是抽象類,即Employee類本身也能被實(shí)例化,此時(shí)應(yīng)該采用我們后面所要講到
13、的 第三種方式來(lái)加以實(shí)現(xiàn)請(qǐng)見(jiàn)后面的說(shuō)明。那么我們還需要為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ù)模型沒(méi)有描述Employee類和它的兩個(gè) 子類的繼承關(guān)系,因此無(wú)法映射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)建新文件資源。輸入或選擇父文件夾(鳥(niǎo): |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ù)訪問(wèn)方法(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中訪問(wèn)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、表的訪問(wèn)代碼(也就是上面的黑體部分)除掉,然后再次執(zhí)行,將發(fā)現(xiàn)沒(méi)有對(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. 本站所有資源如無(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 星球版地理八年級(jí)上冊(cè)《第一節(jié) 地形地勢(shì)特征》聽(tīng)課評(píng)課記錄1
- 新版華東師大版八年級(jí)數(shù)學(xué)下冊(cè)《17.5實(shí)踐與探索第2課時(shí)》聽(tīng)評(píng)課記錄
- 現(xiàn)場(chǎng)清潔方案協(xié)議書(shū)(2篇)
- 2022版新課標(biāo)七年級(jí)上冊(cè)道德與法治第三單元師長(zhǎng)情誼6、7課共5課時(shí)聽(tīng)課評(píng)課記錄
- 七年級(jí)道德與法治上冊(cè)第四單元 生命的思考第八課探問(wèn)生命第2框敬畏生命聽(tīng)課評(píng)課記錄 新人教版
- 【2022年新課標(biāo)】部編版七年級(jí)上冊(cè)道德與法治第三課 發(fā)現(xiàn)自己 2課時(shí)聽(tīng)課評(píng)課記錄
- 《動(dòng)蕩的春秋時(shí)期》參考聽(tīng)課評(píng)課記錄4(新部編人教版七年級(jí)上冊(cè)歷史)
- 一年級(jí)下冊(cè)數(shù)學(xué)聽(tīng)評(píng)課記錄 第三單元 第一節(jié)【第二課時(shí)】《數(shù)一數(shù)(100以內(nèi)數(shù)的數(shù)法)》北師大
- 八年級(jí)地理下冊(cè)8.2臺(tái)灣省的地理環(huán)境與經(jīng)濟(jì)發(fā)展聽(tīng)課評(píng)課記錄2
- 北師大版七年級(jí)數(shù)學(xué)上冊(cè)《第五章一元一次方程5.1認(rèn)識(shí)一元一次方程(第1課時(shí))》聽(tīng)評(píng)課記錄
- 《內(nèi)臟疾病康復(fù)》課件
- 串通招投標(biāo)法律問(wèn)題研究
- 高原鐵路建設(shè)衛(wèi)生保障
- 家具廠各崗位責(zé)任制匯編
- 顳下頜關(guān)節(jié)盤(pán)復(fù)位固定術(shù)后護(hù)理查房
- 硝苯地平控釋片
- 部編版語(yǔ)文六年級(jí)下冊(cè)全套單元基礎(chǔ)??紲y(cè)試卷含答案
- 提高檢驗(yàn)標(biāo)本合格率品管圈PDCA成果匯報(bào)
- 2023年保險(xiǎn)養(yǎng)老地產(chǎn)行業(yè)分析報(bào)告
- 世界古代史-對(duì)接選擇性必修(真題再現(xiàn)) 高考?xì)v史一輪復(fù)習(xí)
- 保險(xiǎn)公司防火應(yīng)急預(yù)案
評(píng)論
0/150
提交評(píng)論