• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    基于Hibernate的對象關(guān)系映射研究

    2016-09-12 08:02:32張少應(yīng)程傳旭
    電子設(shè)計(jì)工程 2016年6期
    關(guān)鍵詞:子類關(guān)系數(shù)據(jù)庫關(guān)聯(lián)

    張少應(yīng),程傳旭

    (西安航空學(xué)院 計(jì)算機(jī)工程系,陜西 西安 710077)

    基于Hibernate的對象關(guān)系映射研究

    張少應(yīng),程傳旭

    (西安航空學(xué)院 計(jì)算機(jī)工程系,陜西 西安 710077)

    對象關(guān)系映射解決了面向?qū)ο蟪绦蛟O(shè)計(jì)語言與關(guān)系數(shù)據(jù)庫存在的互不匹配問題?;趯ο箨P(guān)系映射的持久化框架實(shí)現(xiàn)了業(yè)務(wù)邏輯與數(shù)據(jù)訪問的分離,簡化了數(shù)據(jù)庫訪問,降低了應(yīng)用開發(fā)難度。本文分析了基于Hibernate框架的兩種對象關(guān)系映射策略,并比較了三種繼承映射策略的優(yōu)缺點(diǎn),設(shè)計(jì)了一種基于Hibernate的ORM持久化層的系統(tǒng)架構(gòu),該架構(gòu)結(jié)構(gòu)清晰、開發(fā)效率高,具有較高的應(yīng)用價(jià)值。

    對象關(guān)系映射持久化層繼承關(guān)系關(guān)聯(lián)關(guān)系

    在日常開發(fā)中,關(guān)系數(shù)據(jù)庫表與表之間都存在關(guān)聯(lián)關(guān)系,通常使用主鍵和外鍵來實(shí)現(xiàn),以此減少數(shù)據(jù)庫中數(shù)據(jù)的冗余、提高數(shù)據(jù)訪問效率、保證數(shù)據(jù)庫實(shí)體的完整性和一致性。Hibernate框架是一個(gè)開源的對象關(guān)系映射框架,是輕量級JavaEE應(yīng)用的持久層解決方案,不僅管理Java類到關(guān)系數(shù)據(jù)庫表之間的映射,還提供了數(shù)據(jù)查詢、數(shù)據(jù)緩存等功能,大幅縮短了使用JDBC處理數(shù)據(jù)持久化的時(shí)間。對象關(guān)系映射(Object/Relation Mapping,ORM)是為解決面向?qū)ο笈c關(guān)系數(shù)據(jù)庫存在互不匹配問題的技術(shù),通過ORM映射,使得開發(fā)人員能更好使用面向?qū)ο蟪绦蛟O(shè)計(jì)語言的易用性,以及關(guān)系數(shù)據(jù)庫的優(yōu)勢,提高應(yīng)用程序的開發(fā)效率,實(shí)現(xiàn)關(guān)系數(shù)據(jù)庫存放數(shù)據(jù)的完整和一致。

    基于Hibernate框架的對象關(guān)系映射的主要任務(wù)是實(shí)現(xiàn)數(shù)據(jù)庫關(guān)系表與持久化類之間的映射,簡化了持久化層數(shù)據(jù)的訪問。開發(fā)人員使用面向?qū)ο蟪绦蛟O(shè)計(jì)的方法,以對象為基礎(chǔ),通過操作對象,完成關(guān)系數(shù)據(jù)庫的訪問。本文分析了基于Hibernate框架的兩種對象關(guān)系映射策略,比較了3種繼承映射策略的優(yōu)缺點(diǎn);結(jié)合軟件分層設(shè)計(jì)理念,設(shè)計(jì)了一種基于Hibernate的ORM持久層的系統(tǒng)架構(gòu),該持久層專注于數(shù)據(jù)庫交互進(jìn)行數(shù)據(jù)的持久化工作,提供一個(gè)標(biāo)準(zhǔn)的接口供業(yè)務(wù)邏輯層調(diào)用。該架構(gòu)具有結(jié)構(gòu)清晰、開發(fā)效率高等優(yōu)點(diǎn),具有較強(qiáng)現(xiàn)實(shí)應(yīng)用價(jià)值。

    1 基于Hibernate的對象關(guān)系映射策略

    對象關(guān)系映射大致可以分為繼承關(guān)系映射和關(guān)聯(lián)關(guān)系映射[1]。在關(guān)系數(shù)據(jù)庫中,通過主外鍵將數(shù)據(jù)庫表關(guān)聯(lián)起來,而Hibernate框架[2-3]的關(guān)聯(lián)關(guān)系映射將簡化了持久化層數(shù)據(jù)訪問的優(yōu)勢,在實(shí)現(xiàn)機(jī)制上要比關(guān)系數(shù)據(jù)庫復(fù)雜的多。根據(jù)關(guān)聯(lián)的方向和數(shù)量的不同,關(guān)聯(lián)關(guān)系的映射也不同。按照關(guān)聯(lián)的方向可分為單向關(guān)聯(lián)和雙向關(guān)聯(lián);依據(jù)關(guān)聯(lián)數(shù)量的不同,關(guān)聯(lián)關(guān)系可分為一對一(1-1)、一對多(1-N)、多對一(N-1)以及多對多(N-N)。

    1.1關(guān)聯(lián)關(guān)系映射

    在基于Hibernate框架的關(guān)聯(lián)映射實(shí)現(xiàn)過程中(如圖1),基于XML的ORM映射文件充當(dāng)了關(guān)系數(shù)據(jù)庫與POJO (Plain Old Java Object,POJO)類文件之間的橋梁角色,使用這種具有開放標(biāo)準(zhǔn)、便捷數(shù)據(jù)處理特點(diǎn)的文件,實(shí)現(xiàn)了關(guān)系數(shù)據(jù)庫與POJO類文件之間的關(guān)聯(lián),以此簡化了持久化層數(shù)據(jù)訪問。在ORM映射文件中,不僅完成了關(guān)系數(shù)據(jù)庫表與POJO類之間的基本映射信息(表名與類名、id、字段與類屬性之間的映射),而且使用特定的元素 (<many-to-one>、<o(jì)neto-one>、<many-to-many>等)實(shí)現(xiàn)了基于主鍵、基于唯一外鍵的1-1、N-N關(guān)聯(lián)關(guān)系,或者基于連接表的1-N、N-1關(guān)聯(lián)關(guān)系。所有ORM映射文件在Hibernate的配置文件hibernate. cfg.xml注冊后,才能被Hibernate框架加載,結(jié)合持久化類完成了Hibernate框架的映射機(jī)制。

    持久化類是持久化層數(shù)據(jù)訪問中至關(guān)重要的角色,用來映射關(guān)系數(shù)據(jù)庫中的表,Hibernate框架才能以對象的視角操作數(shù)據(jù)庫。Hibernate框架采用低侵入式設(shè)計(jì),不要求持久化類繼承任何父類或接口,直接采用POJO作為PO(Persistant Object,PO)[4]。而POJO文件不僅為持久化的每個(gè)屬性提供了getter和setter方法,在持久化類中也提供一個(gè)同數(shù)據(jù)庫表的主鍵對應(yīng)的標(biāo)識(shí)屬性;同時(shí)也提供了無參構(gòu)造方法,為Hibernate框架創(chuàng)建持久化類的實(shí)例提供了便利。在POJO文件中,通過在某一個(gè)實(shí)體類文件中聲明與另一個(gè)實(shí)體類對象的屬性,或者創(chuàng)建與當(dāng)前對象關(guān)聯(lián)的集合實(shí)例,實(shí)現(xiàn)了實(shí)體對象之間的關(guān)聯(lián)關(guān)系。

    圖1 基于主鍵的1-1關(guān)聯(lián)映射策略

    1.2繼承關(guān)系映射

    繼承關(guān)系是面向?qū)ο蟪绦蛟O(shè)計(jì)的主要特征,是關(guān)系型數(shù)據(jù)與面向?qū)ο髷?shù)據(jù)結(jié)構(gòu)之間的主要差異之一。在關(guān)系數(shù)據(jù)庫中無法直接實(shí)現(xiàn)對象間的繼承關(guān)系,文獻(xiàn)[6]中提出了基于關(guān)系數(shù)據(jù)庫的管理信息系統(tǒng)中繼承關(guān)系實(shí)現(xiàn)機(jī)制,同框架結(jié)構(gòu)的實(shí)現(xiàn)方法相比,該方法實(shí)現(xiàn)機(jī)制比較復(fù)雜。Hibernate框架實(shí)現(xiàn)繼承關(guān)系映射通常使用以下3種策略。

    1)當(dāng)主表與父類對應(yīng),從表分別對應(yīng)子類時(shí),采用TPS (Table Per SubClass,TPS)映射策略。使用TPS實(shí)現(xiàn)繼承關(guān)系映射的基本方法是父類和每個(gè)子類都對應(yīng)一張表 (如圖2),子類和父類之間使用數(shù)據(jù)庫表的主鍵來設(shè)置它們的關(guān)聯(lián)關(guān)系;父類實(shí)例存放在父類表,而子類實(shí)例則由父類表和子類表共同存儲(chǔ)?;谠摲N設(shè)計(jì),主表和從表的映射信息都存放在與父類同名的配置文件中,通過<joined-subclass>元素實(shí)現(xiàn)子類及對應(yīng)從表之間的映射信息,指定子類的名字、子類對應(yīng)的表名、子類的主鍵以及屬性,完成子類映射關(guān)系的配置。使用TPS策略,開發(fā)人員能夠完全使用面向?qū)ο笏枷?,?shí)現(xiàn)對PO文件的使用;從表中除主、外鍵的其他字段,可以采用非空約束。但該策略在查詢子類實(shí)例數(shù)據(jù)時(shí),需要跨表查詢,降低了數(shù)據(jù)處理的性能。

    圖2 基于TPS的繼承關(guān)系映射策略

    2)整個(gè)繼承關(guān)系中的實(shí)例都存放在同一個(gè)表中,使用標(biāo)識(shí)字段區(qū)分不同的對象實(shí)例,采用TPH (Table Per Class Hierarchy,TPH)映射策略。基于這種設(shè)計(jì),子類和父類的映射信息都可以存放在父類對應(yīng)的映射文件中,使用<subclass>元素配置每個(gè)子類擴(kuò)展的獨(dú)有屬性,指定子類的名字、子類的具體區(qū)分值以及屬性;使用discriminator元素映射標(biāo)識(shí)字段,將表的區(qū)分字段配置成區(qū)分值。使用該方法最大的優(yōu)點(diǎn)就是簡單、執(zhí)行效率高,所有數(shù)據(jù)存放在一張表中,無論進(jìn)行何種查詢,底層數(shù)據(jù)庫只需在一張表中查詢,無需進(jìn)行多表連接查詢或者union查詢;數(shù)據(jù)的存取通過操作各自的類實(shí)例完成。缺點(diǎn)在于存在冗余字段,每次在類層次的任何地方添加一個(gè)新屬性時(shí)都必須將該屬性添加到這張表中,所有子類定義的字段,都不能有非空的限制,如果有太多的非空限制時(shí),將使得父類的實(shí)例在這些列沒有值存在,產(chǎn)生了數(shù)據(jù)完整性沖突,導(dǎo)致父類無法存放在數(shù)據(jù)庫中。

    3)實(shí)體類層次上采用繼承關(guān)系,每個(gè)具體類使用一個(gè)數(shù)據(jù)實(shí)體,在該實(shí)體中不僅包含屬性也包含繼承的父類成員屬性,采用TPC(Table Per Concrete Class,TPC)映射策略?;谶@種設(shè)計(jì),父類實(shí)例的數(shù)據(jù)保存在主表中,子類實(shí)例的數(shù)據(jù)保存在子表中,每個(gè)子類對應(yīng)一個(gè)具體的表,子類表之間沒有關(guān)聯(lián)關(guān)系。在該映射策略中,由于子類表中的字段等于父類屬性加子類屬性之和,因此子類表中的字段比父類表中的字段多。在父類對應(yīng)的映射文件中,使用<union-subclass>元素指定子類的名字、子類對應(yīng)的表名以及屬性,完成子類擴(kuò)展屬性的配置。TPC映射策略的優(yōu)點(diǎn)在于數(shù)據(jù)結(jié)構(gòu)清晰,子類的成員屬性映射的字段可以不受非空約束。該策略缺點(diǎn)在于子表的主鍵屬性不允許重復(fù);由于同一繼承層次中所有實(shí)體類必須使用同一主鍵種子,因此不能使用數(shù)據(jù)庫的自增方式生成主鍵;父類的屬性出現(xiàn)在多張表中,出現(xiàn)數(shù)據(jù)冗余。

    2 基于Hibernate的ORM持久層的設(shè)計(jì)

    軟件分層設(shè)計(jì)具有擴(kuò)展性強(qiáng)、維護(hù)方便、組件重用性高等優(yōu)點(diǎn),有利于軟件開發(fā)的標(biāo)準(zhǔn)化,也便于對整個(gè)開發(fā)過程的管理,因此被越來越多的開發(fā)者使用?;贖ibernate的ORM持久層[7]就是在三層架構(gòu)的基礎(chǔ)上,將持久化層從業(yè)務(wù)邏輯層中分離出來,使其位于數(shù)據(jù)庫層與業(yè)務(wù)邏輯層之間,形成了目前比較流行的基于JavaEE的多層軟件架構(gòu) (如圖3)。使用多層軟件架構(gòu),層次分明,分工明確且相對獨(dú)立,實(shí)現(xiàn)了功能層中業(yè)務(wù)邏輯和數(shù)據(jù)邏輯之間的松耦合關(guān)系[5],同時(shí)也降低了開發(fā)成本和開發(fā)風(fēng)險(xiǎn),提高了數(shù)據(jù)的安全性能。目前基于Struts2.x、Spring和Hibernate框架集成的開發(fā)方式,采用面向接口編程的思想,具有良好的分層結(jié)構(gòu)設(shè)計(jì),以及開發(fā)效率高、通用性好等優(yōu)點(diǎn),是企業(yè)級基于JavaEE應(yīng)用開發(fā)的首選。而基于Hibernate的對象關(guān)系映射技術(shù),本身就是用于簡化持久化層數(shù)據(jù)的訪問,該技術(shù)在分層設(shè)計(jì)中的使用,縮短了開發(fā)周期,降低了開發(fā)難度。

    在持久層實(shí)現(xiàn)中,DAO層完成連接數(shù)據(jù)庫的增加、刪除、修改等實(shí)現(xiàn)細(xì)節(jié)。而Hibernate框架通過ORM映射文件完成關(guān)系數(shù)據(jù)庫與POJO類文件之間的關(guān)聯(lián),結(jié)合DAO層實(shí)現(xiàn)了底層數(shù)據(jù)訪問操作與業(yè)務(wù)邏輯的分離,對業(yè)務(wù)邏輯提供了各類面向?qū)ο蟮臄?shù)據(jù)訪問接口,業(yè)務(wù)邏輯層通過調(diào)用DAO接口實(shí)現(xiàn)了整個(gè)業(yè)務(wù)方法。

    圖3 基于SSH2管理信息系統(tǒng)架構(gòu)

    3 結(jié)束語

    對象關(guān)系映射使得關(guān)系數(shù)據(jù)庫與對象之間的轉(zhuǎn)換更加透明,開發(fā)人員無需關(guān)心數(shù)據(jù)庫連接、并發(fā)和事務(wù)等特性;也改變了以往使用SQL語句進(jìn)行查詢的麻煩,使開發(fā)人員完全使用面向?qū)ο蟮乃枷刖幊?,完全使用面向?qū)ο蟮慕嵌冗M(jìn)行關(guān)聯(lián)查詢操作。Hibernate框架是目前比較成熟的ORM框架,是對JDBC輕量級封裝,實(shí)現(xiàn)了用面向?qū)ο蟮姆绞絹聿僮麝P(guān)系數(shù)據(jù)庫。文中分析了基于Hibernate框架的ORM實(shí)現(xiàn)策略,結(jié)合Struts2.x、Spring和Hibernate三框架集成開發(fā)方式,研究了一種基于Hibernate的ORM持久化層的系統(tǒng)架構(gòu),該架構(gòu)利用分層結(jié)構(gòu)的設(shè)計(jì)思想,利用持久化層實(shí)現(xiàn)了業(yè)務(wù)邏輯層與數(shù)據(jù)層的分離,降低了開發(fā)難度,該架構(gòu)層次分明,分工明確,在軟件開發(fā)中具有較強(qiáng)的應(yīng)用價(jià)值。

    [1]丁昊志.對象關(guān)系映射模型研究[D].北京:華北電力大學(xué),2006.

    [2]The Hibernate Team,TheJBossVisualDesignTeam. HIBERNATE-Relational Persistence for Idiomatic Java[EB/ OL].2015.http://docs.jboss.org/hibernate/orm/4.3/manual/en-US/html/

    [3]唐振明.JavaEE主流開源框架[M].北京:電子工業(yè)出版社,2011.

    [4]李剛.輕量級JavaEE企業(yè)應(yīng)用實(shí)戰(zhàn)[M].4版.北京:電子工業(yè)出版社,2014.

    [5]劉德山,楊彬彬.基于Hibernate框架的數(shù)據(jù)持久層架構(gòu)設(shè)計(jì)及應(yīng)用[J].微型機(jī)與應(yīng)用,2011,30(15):12-14.

    [6]張?jiān)茲?,龔玲,周伯?基于關(guān)系數(shù)據(jù)庫管理系統(tǒng)的繼承機(jī)制[J].計(jì)算機(jī)工程,1997(23):42-44

    [7]Ming Xue,Changjun Zhu.Design and Implementation of the Hibernate Persistence Layer Data Report System Based on J2EE[C]//2009Pacific-AsiaConferenceonCircuits,Communications and Systems,2009.

    Research of object-relational mapping based on hibernate

    ZHANG Shao-ying,CHENG Chuan-xu
    (The Department of Computer Engineering,Xi'an Aeronautical University,Xi'an 710077,China)

    Object relational mapping solves the matching problem of the object-oriented programming language and the relational database.Persistence framework based on object relational mapping realizes the separation of business logic and

    data access,simplifies the database access,reduces the difficulty of application development.This paper analyzes the two

    kinds of object relational mapping strategy based on Hibernate framework,and compares the advantages and disadvantages of three kinds of inheritance mapping strategy,designs a system architecture based on Hibernate ORM persistence layer.The architecture structure have many advantages of clear framework,high efficiency and higher application value.

    inherited relationship;incidence relation;persistence layer;object/relation mapping

    TP311

    A

    1674-6236(2016)06-0128-03

    2015-05-18稿件編號(hào):201505147

    陜西省教育廳自然科學(xué)項(xiàng)目(12JK0951);西安航空學(xué)院2014年度校級高等教育教學(xué)改革研究項(xiàng)目(2014Z010)

    張少應(yīng)(1976—),男,陜西咸陽人,碩士,講師。研究方向:管理信息系統(tǒng)。

    猜你喜歡
    子類關(guān)系數(shù)據(jù)庫關(guān)聯(lián)
    關(guān)系數(shù)據(jù)庫在高爐數(shù)據(jù)采集系統(tǒng)中的應(yīng)用
    山東冶金(2022年2期)2022-08-08 01:51:30
    卷入Hohlov算子的某解析雙單葉函數(shù)子類的系數(shù)估計(jì)
    “一帶一路”遞進(jìn),關(guān)聯(lián)民生更緊
    關(guān)于對稱共軛點(diǎn)的倒星象函數(shù)某些子類的系數(shù)估計(jì)
    奇趣搭配
    智趣
    讀者(2017年5期)2017-02-15 18:04:18
    基于索引結(jié)構(gòu)的關(guān)系數(shù)據(jù)庫關(guān)鍵詞檢索
    一種基于數(shù)據(jù)圖劃分的關(guān)系數(shù)據(jù)庫關(guān)鍵詞檢索方法
    基于用戶反饋的關(guān)系數(shù)據(jù)庫關(guān)鍵字查詢系統(tǒng)
    塊H矩陣新的子類
    开原市| 河西区| 民乐县| 邯郸市| 景德镇市| 金门县| 利川市| 莆田市| 富平县| 万全县| 凌海市| 宿松县| 万载县| 盐边县| 定结县| 碌曲县| 加查县| 新郑市| 新巴尔虎左旗| 七台河市| 文化| 阜新市| 旬阳县| 阳新县| 会泽县| 达州市| 城步| 连州市| 秦皇岛市| 临城县| 赤水市| 阳江市| 靖江市| 开阳县| 嘉峪关市| 尉犁县| 宝坻区| 奈曼旗| 新巴尔虎左旗| 抚宁县| 正阳县|