鄭啟龍
(渤海大學教育與體育學院,遼寧錦州121013)
基于Hlbernate運動員血液生物學指標監控持久化設計
鄭啟龍
(渤海大學教育與體育學院,遼寧錦州121013)
針對運動員血液生物學指標監控系統開發過程中數據存取的難點問題,采用Hibernate進行數據持久化設計,通過Hibernate體系結構、數據結構設計、Hibernate配置文件、持久化類設計、映射文件設計等方面研究,得到了進行數據持久化操作的類文件和映射文件。開發人員直接操作這兩類文件就可完成數據存取的全部工作,簡化了軟件開發過程,提高了軟件的開發效率和可維護性。
運動員;血液生物學指標;監控系統;Hibernate;持久化
血液是人體生命的源泉,使體內細胞不斷更新,各組織、器官的功能得以維持,讓人充滿活力。人體的生理變化和病理變化往往引起血液成分的改變,所以血液成分檢測有著重要的臨床意義[1]。在運動訓練方面,應用血液生物學指標對運動員身體機能評定和訓練負荷監控越來越受到重視,但目前運用生物學指標對運動員機能狀態綜合監控的研究較少[2]。血液生物學指標監控系統通過監測運動員相關指標來掌握運動訓練情況和身體機能狀態,為提高運動訓練效果和運動成績提供客觀依據。數據持久化是系統開發的重要工作,Hibernate是一個開放源代碼的對象關系型數據持久化框架,通過對JDBC的輕量級對象封裝,向程序員屏蔽了底層的數據庫操作,使Java程序員可以隨心所欲地使用對象編程思維來操縱數據庫,提高了軟件的開發效率和可維護性。本文基于Hibernate展開研究,為系統開發提供支持。
持久化(Persistence)是把數據保存到可永久保存的存儲設備中,持久化最常用的方法是對象關系映射。對象關系映射(ORM,Object Re1ationa1 Mapping)用于實現程序對象到關系數據庫數據的映射[3]。ORM廣義上是對象模型和關系型數據庫的數據結構之間的相互轉換;狹義上是基于關系型數據庫的數據存儲,實現虛擬面向對象的數據訪問接口。Hibernate 對JDBC(Java Data Base Connectivity)進行了輕量級對象封裝,是目前Java領域應用最廣泛、最靈活的持久化關系映射框架[4]。Hibernate體系結構如圖1所示。

圖1 Hibernate體系結構
在圖1所示的四層體系結構中,最頂層是應用程序的臨時對象,最底層是數據庫,即通過中間層把臨時對象保存到數據庫中。第二層是核心部分,由5個組件構成,通過持久化對象與頂層相連,Session Factory為事務之間可以重用數據提供可選的二級緩存,Session表示應用程序與持久存儲層之間交互操作的一個單線程對象,Transaction通過抽象將應用從底層具體的JDBC、JTA以及CORBA事務隔離開,Transaction Factory生成Transaction對象實例的工廠,供擴展和實現時使用;Connection Provider起到連接池的作用,生成JDBC連接工廠,通過抽象將應用從底層的Datasource或DriverManager隔離開[5_6]。第三層是事務訪問接口,包括3種方式,JNDI(Java名稱和目錄接口)用于管理對象;JDBC(Java的數據庫連接)用于本地事物操作;JTA(Java事務API)用于操作跨數據庫資源操作。
運動員血液生物學指標監控系統用于監控運動員的血液生物學指標,因此,包括運動員和指標兩個實體。運動員實體用于存儲運動員信息,一個運動員保存為一條記錄,“運動員編號”為主關鍵字;指標實體用于存儲采樣以及化驗指標值,一個運動員的一次采樣保存為一條記錄,“運動員編號和采樣編號”構成聯合主關鍵字。因此,運動員實體和指標實體之間是一對多的聯系,運動員實體的一條記錄對應指標實體的多條記錄,“運動員編號”為指標實體的外關鍵字。兩個實體間的一對多聯系通過“運動員編號”屬性建立名稱為“FK_Ath1etes_Indicators”的外鍵約束實現。系統基于Sq1Server數據庫管理系統開發,為了簡化系統開發,只選用Varchar、Char、Datetime和Decima1等4種數據類型實現變長字符串、定長字符串、日期時間型和精確數據值的存儲。系統數據結構設計結果如圖2所示。

圖2 系統數據結構
配置文件定義了數據庫的連接信息和全局配置信息。使用配置文件具有功能強大、操作方便、良好的格式檢查機制、文件自動加載等優點。Hibernate的核心配置文件是Hibernate.cfg.xm1,放置在c1asspath文件夾下,系統啟動時能默認地加載。也可以使用Properties文件進行配置,但Hibernate提供XML文件,不僅提供了更易讀的結構和更強的配置能力,還可以直接對映射文件加以配置。本系統的Hibernate.cfg.xm1文件基本配置信息如下:


基本配置是系統運行需要的常規信息。除此之外,為了軟件開發和維護的方便性,還附加一些配置信息,包括是否輸出SQL語句到控制臺、Hibernate每次從數據庫取出并放到JDBC的Statement中的記錄條數、數據庫方言、Hibernate每次批量操作的記錄數、是否允許Hibernate用JDBC的可滾動結果集、連接數據庫時是否使用Unicode編碼等、指定映射文件等。
持久化是將程序數據在持久狀態和臨時狀態間轉換的機制。持久化類(Persistent C1ass)用于完成對數據庫的存取操作,即將數據保存到數據庫中或從數據庫中讀取數據。一個持久化類的實例處于臨時狀態(Transient)、持久化狀態(Persistent)和脫管狀態(Detached)3種狀態之一,這與持久化上下文(Persistent Context)有關。臨時狀態是實例從未與任何上下文關聯過;持久化狀態是實例正在與某個上下文關系;脫管狀態是實例曾經與某個上下文關系過,但那個上下文被關閉了。save()方法把臨時對象轉變為持久化對象;update()方法把脫管對象轉換為持久化對象;c1ose()方法將持久化對象轉變為脫管對象;de1ete()方法將脫管對象轉變為臨時對象或將持久化對象轉化為臨時對象;1oad()方法將臨時對象轉變為脫管對象。持久化類一般稱為PO(Persistent Object),JavaBean的一種用來裝載數據的簡單對象,將功能、處理、值、數據庫訪問和其他任何可以用Java代碼創造的對象進行打包,編程時直接使用JavaBean而不用擔心變化。PO由實體屬性定義、關聯實體定義和getter/setter方法構成。以一對多關系為例,“一”端增加Set屬性,使用集合屬性來訪問關聯的持久類,“多”端直接訪問被關聯實體。getter和setter是JAVABean提供的取值和賦值的方法[7_8]。
圖2中存在Sq1Server數據庫管理系統的4種類型,與Hibernate之間的數據類型對應關系如下:Varchar對應String、Char對應Character、Datetime根據表示的值不同映射為Date/Time/Timestamp之一、Decima1映射為Big_Decima1。以指標(indexInformation)實體為例來說明持久化類實現方法。對于簡單的JavaBean,除了setter/getter方法外不包含其他邏輯。在PO中通常要實現Seria1izab1e接口。主要用來完成以下兩項工作:一是保存javaBean設計時的配置信息供程序啟動時使用;二是用于遠程方法調用(RMI,Remote Method Invocation),當向遠程對象傳遞消息時用來傳遞參數的返回值。指標(indicators)實體包含了imp1ements Seria1izab1e的PO實現代碼如下:


Hibernate的持久化類和關系數據庫表之間的映射用一個XML文檔實現。通過一系列XML元素的配置,把持久化類映射到數據庫表,并把持久化類的屬性映射數據列。映射文件通常包括四類元素,<hibernate_mapping>是映射文件的根元素,包含若干可選屬性;<c1ass>定義一個持久化類與數據表的映射關系;<id>映射屬性到數據庫表主鍵的字段對應關系;<property>映射持久化類的屬性與數據庫表字段之間的對應關系;<composite_id>映射多個屬性構成的聯合主鍵;<generator>定義內置生成器,包括increment自增方式生成主鍵、包含IP地址和JVM啟動時間的UUID、由底層數據庫生成的Identity自增主鍵、底層數據庫提供的Sequence序列標識符、按照high/1ow算法生成的Hi1o標識符、跨數據庫時由底層方言產生的native標識符等。除了映射持久化類與數庫表之間的對應關系外,還要進行關聯關系映射,包括一對一關聯、一對多關聯和多對多關聯,每個關聯又可分為單向和雙向兩種[9]。與上面PO實現相對應的指標(indicators)實體的映射文件代碼如下:

<many_to_one co1umn=″ath1etesNo″c1ass=″th1etes″name=″ath1etesNo″not_nu11=″true″cascade=″none″/>
對運動員訓練情況和身體機能狀態監控的方法很多,血液生物學指標是比較理想的方法,具有較強的科學性[10]。本文基于Hibernate研究運動員血液生物學指標監控系統持久化方法,開發人員以此成果為依據可以直接編程實現,提高了軟件開發效率。本文研究成果具有以下優點:對象/關系數據庫映射,使用時只需要操縱對象,拋棄了數據庫中心的思想;透明持久化,對象生存期很短僅與Session相關聯,一旦Session被關閉,對象就會脫離持久化狀態被應用程序的任何層自由使用;緩存機制,提供一級緩存和二級緩存,簡潔了HQL編程。
[1]百度百科.血液[EB/OL].(2015_06_30).http://baike.baidu.com/ view/18631.htm?fr=a1addin.
[2]盧明月,李之俊.血液生物學指標在女壘運動員冬訓期間機能狀態監控中的應用[J].長春理工大學學報:自然科學版,2009,32(3):424_426.
[3]郭朗.Hibernate框架ORM常見數據關聯分析[J].信息系統工程,2013,26(4):134.
[4]徐金虎,宋斌,丁銳.Spring MVC+Hibernate+jQeury模式開發框架應用研究[J].自動化技術與應用,2015,34(3):42_46.
[5]賴小平.基于SpringMVC+Hibernate的傻瓜進銷存系統的設計與實現[J].福建電腦,2015,31(3):38_40.
[6]張國平,王文虎,馬麗.基于Struts和Hibernate的煤礦管理系統的設計[J].計算機技術與發展,2014,24(4):243_245.
[7]蔡群英.基于Struts2+Hibernate+Spring的留言板的開發[J].電腦知識與技術,2014,10(24):5656_5658.
[8]張少應,程傳旭.基于Hibernate持久化層的設計與實現[J].計算機技術與發展,2014,24(12):101_104.
[9]葉廣仔,劉曉蔚.在線考試系統中Hibernate框架的應用[J].電子設計工程,2013,21(7):1_4.
[10]談艷.運動員機能狀態監控中血液生物學指標的綜合運用[J].遼寧體育科技,2011,33(3):55_58.
Perslstence deslgn on hemo-blologlcal lndlces monltorlng system of athletes based on Hlbernate
ZHENG Qi_1ong
(School of Education and Sports,Bohai University,Jinzhou 121013,China)
For the difficu1ties of data access in the deve1oping hemo_bio1ogica1 indices monitoring system of ath1etes,Hibernate is used to design data persistence,and c1ass fi1es and mapping fi1es that can operate data persistence is obtained by studying Hibernate architecture,data structure design,Hibernate configuration fi1es,persistent c1ass design,mapping fi1e design.Deve1-opers can manipu1ate these two types of fi1e direct1y to comp1ete a11 the work of data access,so the software deve1opment process wi11 be simp1ified and the deve1opment efficiency and maintainabi1ity of software wi11 be improved.
ath1etesj hemo_bio1ogica1 indicesj monitoring systemj Hibernatej persistence
TN919.5
A
1674_6236(2016)10_0174_03
2015_07_03稿件編號:201507032
渤海大學博士啟動基金(2015bs001)
鄭啟龍(1972—),男,山東膠南人,博士,講師。研究方向:體育教學與訓練。