郑启龙
(渤海大学教育与体育学院,辽宁锦州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—),男,山东胶南人,博士,讲师。研究方向:体育教学与训练。