摘 要:本文討論了Hibernate一對(duì)多關(guān)聯(lián)映射是三種形式,即一對(duì)多單向關(guān)聯(lián)、多對(duì)一單向關(guān)聯(lián)和一對(duì)多雙向關(guān)聯(lián)映射,介紹了一對(duì)多雙向關(guān)聯(lián)的作用和實(shí)現(xiàn)原理,并基于駕校管理系統(tǒng)的數(shù)據(jù)庫(kù)設(shè)計(jì)實(shí)現(xiàn)了一對(duì)多雙向關(guān)聯(lián)的一個(gè)應(yīng)用。
關(guān)鍵詞:Hibernate;一對(duì)多關(guān)聯(lián)映射;雙向關(guān)聯(lián);駕校管理系統(tǒng)
中圖分類號(hào):TP311.52
Hibernate是一個(gè)基于Java的開放源代碼持久化中間件,它對(duì)JDBC做了輕量級(jí)封裝,能夠提供ORM映射服務(wù)、數(shù)據(jù)查詢和數(shù)據(jù)緩存等功能。Hibernate作用于DAO層,“對(duì)象—關(guān)系”映射讓開發(fā)人員可以方便地使用面向?qū)ο笏枷雭磉M(jìn)行數(shù)據(jù)庫(kù)操作,以節(jié)省對(duì)象持久化相關(guān)的大量JDBC編程工作量。輕量級(jí)的封裝避免了過多復(fù)雜的功能,減輕了程序員的負(fù)擔(dān)。Hibernate開放源代碼并提供了詳細(xì)的API,也為開發(fā)人員帶來的應(yīng)用和擴(kuò)張的極大便利。這些性能使得Hibernate成為應(yīng)用最廣泛的Java數(shù)據(jù)持久化框架。
1 一對(duì)多雙向關(guān)聯(lián)映射實(shí)現(xiàn)原理
1.1 Hibernate映射。映射是Hibernate的一個(gè)重要功能,它能夠在對(duì)象模型和關(guān)系模型之間轉(zhuǎn)換,開發(fā)人員可以使用對(duì)象模型來操作數(shù)據(jù)。Hibernate映射基于XML,具有較好的易讀性和維護(hù)性。對(duì)于數(shù)據(jù)庫(kù)實(shí)體的一對(duì)一、一對(duì)多、多對(duì)多三種關(guān)系,Hibernate分別提供了對(duì)應(yīng)的映射實(shí)現(xiàn)。
1.2 一對(duì)多關(guān)聯(lián)映射。一對(duì)多關(guān)聯(lián)是最為常見的關(guān)聯(lián)關(guān)系,Hibernate實(shí)現(xiàn)了一對(duì)多關(guān)聯(lián)映射和多對(duì)一關(guān)聯(lián)映射。一對(duì)多關(guān)聯(lián)映射,以數(shù)據(jù)表“一”的一方來進(jìn)行映射,關(guān)系由“一”的一端來維護(hù),在“一”方的“*.hbp.xml”中添加“多”方的實(shí)體類集合對(duì)象,并在“一”的實(shí)體類中根據(jù)XML映射添加“多”方的對(duì)象集合來完成映射。
1.3 一對(duì)多雙向關(guān)聯(lián)映射。一對(duì)多的雙向關(guān)聯(lián)就是在“一”和“多”兩端同時(shí)維護(hù)映射關(guān)系,使得任意一端都可以關(guān)聯(lián)到另一端,從“一”的一端可以得到“多”的一端的對(duì)象集,從“多”的一端也可以得到“一”的一端對(duì)應(yīng)的對(duì)象,實(shí)現(xiàn)互相級(jí)聯(lián),為程序提高更靈活有效的查詢方式。其實(shí)現(xiàn)原理是:在“多”方的“*.hbp.xml”配置文件中,通過
2 一對(duì)多雙向關(guān)聯(lián)映射實(shí)現(xiàn)
2.1 駕校管理系統(tǒng)簡(jiǎn)介。當(dāng)前,中國(guó)已經(jīng)成為全球第一的汽車消費(fèi)市場(chǎng),傳統(tǒng)駕校的粗放式人工管理方式難以適應(yīng)市場(chǎng)的需求和發(fā)展。這使得息化的駕校管理平臺(tái)具有了好的市場(chǎng)前景。通過駕校管理系統(tǒng),學(xué)員可以查詢駕校的基本信息,如場(chǎng)地位置、設(shè)施配備、收費(fèi)情況、社會(huì)評(píng)價(jià)等,學(xué)員可以查看教練信息,如教練的基本情況、指導(dǎo)車型、通過率等,通過了解這些信息然后在線咨詢和報(bào)名,并能夠預(yù)約教練、查看自己的學(xué)習(xí)進(jìn)度和管理考試科目;教練可以查詢所屬學(xué)員的信息、安排學(xué)員的考試科目、與學(xué)員進(jìn)行在線交流、安排預(yù)約等;駕校管理員可以對(duì)教練、學(xué)生信息進(jìn)行管理,可以發(fā)布通知公告,并對(duì)教練學(xué)員安排情況進(jìn)行調(diào)度。
2.2 駕校管理系統(tǒng)數(shù)據(jù)庫(kù)設(shè)計(jì)。在駕校管理系統(tǒng)中,主要的實(shí)體對(duì)象有學(xué)員、教練、駕校、駕校管理員等,它們部分E-R圖設(shè)計(jì)如下:
圖1
在數(shù)據(jù)庫(kù)設(shè)計(jì)中可以看出,學(xué)員與教練、教練與駕校都形成了一對(duì)多的關(guān)系,而且在用戶使用時(shí),都是需要學(xué)員到教練、教練到學(xué)員這種雙向的查詢,如果基于一對(duì)多的單向映射,那么DAO層將無法滿足反向的查詢需要,如果在一對(duì)多單向映射的基礎(chǔ)上添加反向的多對(duì)一單向映射,代碼量會(huì)加倍,業(yè)務(wù)關(guān)系也變得比較繁瑣。因此,選擇一對(duì)多的雙向關(guān)聯(lián)映射是解決這類問題的有效途徑。
2.3 一對(duì)多雙向關(guān)聯(lián)映射的實(shí)現(xiàn)。本文以學(xué)員和教練的雙向關(guān)聯(lián)映射來描述實(shí)現(xiàn)過程。首先,定義學(xué)員類Student.java,在學(xué)員類中添加教練coach對(duì)象,代碼結(jié)構(gòu)如下:
public class Student {
private String ID;
private String studentName;
private String studentSex;
private int studentAge;
private String studentIdentity;
//此處省略其他成員變量聲明
private Coach coach;
//此處省略get/set方法
}
然后,創(chuàng)建Student.hbm.xml文件,在學(xué)員方即“多”方通過
<!--省略其他屬性聲明-->
接著,定義教練實(shí)體類Coach.java,在教練方即“一”方添加 “多”方的集合Set對(duì)象,代碼結(jié)構(gòu)如下:
public class Coach {
private int ID;
private String coachName;
private String coachSex;
private int coachType;
private String coachState;
//此處省略其他成員變量聲明
private Set
//此處省略get/set方法
}
最后,在Coach.hbm.xmlX文件中通過
<!—省略其他屬性聲明-->
其中,inverse屬性使得關(guān)聯(lián)關(guān)系反轉(zhuǎn)到學(xué)員一方,由學(xué)員方維護(hù)連接關(guān)系,這樣在數(shù)據(jù)庫(kù)操作中,可以減少冗余查詢。在完成以上配置之后,可以根據(jù)業(yè)務(wù)需要?jiǎng)?chuàng)建DAO類,完成數(shù)據(jù)的基本操作。
3 結(jié)束語
一對(duì)多關(guān)聯(lián)是數(shù)據(jù)庫(kù)設(shè)計(jì)中最常見的一種關(guān)聯(lián)關(guān)系,通過Hibernate一對(duì)多雙向關(guān)聯(lián)映射,可以使得查詢更加靈活、代碼數(shù)量減少,業(yè)務(wù)邏輯也更清晰,在實(shí)際應(yīng)用開發(fā)中,可以根據(jù)業(yè)務(wù)需要,有效地使用Hibernate一對(duì)多雙向關(guān)聯(lián),提高項(xiàng)目開發(fā)效率和質(zhì)量。
參考文獻(xiàn):
[1]陳正舉.基于HIBERNATE的數(shù)據(jù)庫(kù)訪問優(yōu)化[J].計(jì)算機(jī)應(yīng)用與軟件,2012(29):144-149.
[2]李杰.基于ORM的輕量級(jí)數(shù)據(jù)持久化技術(shù)研究及應(yīng)用[J].計(jì)算機(jī)科學(xué),2010(37):190-193.
[3]趙廣利.基于NHibernate的數(shù)據(jù)持久化方案[J].計(jì)算機(jī)工程,2009(35):53-55.
[4]宮生文,王寧.Hibernate作為J2EE數(shù)據(jù)持久層的分析和研究[J].計(jì)算機(jī)與信息技術(shù),2006(04):40-42.
[5]陶勇.Hibernate ORM最佳實(shí)踐[M].北京:清華大學(xué)出版,2010.
作者簡(jiǎn)介:黃昊(1979-),男,陜西安康人,講師,繼續(xù)教育部副主任,碩士,研究方向:計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)、軟件開發(fā);馬杰(1980.06-),陜西漢中人,副教授,就職于教務(wù)處,碩士,研究方向:軟件開發(fā)。
作者單位:海南軟件職業(yè)技術(shù)學(xué)院,海南瓊海 571400