• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      Hibernate一對(duì)多雙向關(guān)聯(lián)映射在駕校管理系統(tǒng)中的應(yīng)用

      2014-04-29 00:00:00黃昊馬杰

      摘 要:本文討論了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ù)庫設(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ù)庫操作,以節(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ù)庫實(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”配置文件中,通過元素與“一”方的實(shí)體類建立關(guān)聯(lián),并在“多”方的實(shí)體類中添加“一”方的實(shí)體類對(duì)象作為成員變量;在“一”方的“*.hbp.xml”配置文件中,通過在集合中用元素添加“多”方實(shí)體類的集合,并設(shè)置inverse屬性,使得關(guān)聯(lián)關(guān)系反轉(zhuǎn)到“多”的一方,由“多”的一方維護(hù),這樣可以有效避免產(chǎn)生多余的數(shù)據(jù)操作語句。同時(shí),在“一”方的實(shí)體類中添加“多”方的實(shí)體類集合對(duì)象作為成員變量。在這個(gè)過程中,雙方的關(guān)聯(lián)關(guān)系通過“多”方表的外鍵來建立。

      2 一對(duì)多雙向關(guān)聯(lián)映射實(shí)現(xiàn)

      2.1 駕校管理系統(tǒng)簡介。當(dāng)前,中國已經(jīng)成為全球第一的汽車消費(fèi)市場,傳統(tǒng)駕校的粗放式人工管理方式難以適應(yīng)市場的需求和發(fā)展。這使得息化的駕校管理平臺(tái)具有了好的市場前景。通過駕校管理系統(tǒng),學(xué)員可以查詢駕校的基本信息,如場地位置、設(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ù)庫設(shè)計(jì)。在駕校管理系統(tǒng)中,主要的實(shí)體對(duì)象有學(xué)員、教練、駕校、駕校管理員等,它們部分E-R圖設(shè)計(jì)如下:

      圖1

      在數(shù)據(jù)庫設(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é)員方即“多”方通過元素配置與教練方即“一”方的關(guān)聯(lián):

      <!--省略其他屬性聲明-->

      <!-- coachID 為外鍵-->

      接著,定義教練實(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 students = new HashSet(0);

      //此處省略get/set方法

      }

      最后,在Coach.hbm.xmlX文件中通過元素配置與學(xué)員方即“一”方的關(guān)聯(lián):

      <!—省略其他屬性聲明-->

      <!--外鍵-->

      其中,inverse屬性使得關(guān)聯(lián)關(guān)系反轉(zhuǎn)到學(xué)員一方,由學(xué)員方維護(hù)連接關(guān)系,這樣在數(shù)據(jù)庫操作中,可以減少冗余查詢。在完成以上配置之后,可以根據(jù)業(yè)務(wù)需要?jiǎng)?chuàng)建DAO類,完成數(shù)據(jù)的基本操作。

      3 結(jié)束語

      一對(duì)多關(guān)聯(lián)是數(shù)據(jù)庫設(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ù)庫訪問優(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.

      作者簡介:黃昊(1979-),男,陜西安康人,講師,繼續(xù)教育部副主任,碩士,研究方向:計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)、軟件開發(fā);馬杰(1980.06-),陜西漢中人,副教授,就職于教務(wù)處,碩士,研究方向:軟件開發(fā)。

      作者單位:海南軟件職業(yè)技術(shù)學(xué)院,海南瓊海 571400

      普安县| 达孜县| 永福县| 平和县| 隆回县| 黄冈市| 黔南| 社会| 西宁市| 泽普县| 五大连池市| 体育| 乳山市| 罗定市| 浦北县| 冷水江市| 渝北区| 泸水县| 县级市| 岳池县| 定安县| 略阳县| 扶风县| 高州市| 武强县| 木里| 屏山县| 乌拉特中旗| 龙岩市| 拜泉县| 临澧县| 宝兴县| 太和县| 大同市| 黄陵县| 屏山县| 麻江县| 遂昌县| 灵台县| 长乐市| 砀山县|