admin 管理员组

文章数量: 1184232


2024年3月28日发(作者:linux自带gcc编译器吗)

第21卷 

第7期 

Vo1.21 

No.7 

电子设计工程 

Electronic Design Engineering 

2013年4月 

Apr.2013 

在线考试系统中Hibernate框架的应用 

叶广仔.刘晓蔚 

(东莞职业技术学院计算机工程系,广东东莞523808) 

摘要:在系统开发过程中,往往会遇到应用程序中的对象模型与数据库中的关系模型两种不匹配的模型,为了实现 

它们间的相互映射,使得在面向对象程序开发中对象信息能够方便地保存到数据库的表内.文章采用了Hibernate框 

架来实现对象关系映射(ORM),解决对象模型中的继承、关联以及缓存等问题,从而减少代码的复杂度以及提高系统 

的可维护性 

关键词:考试系统;Hibernate框架;对象关系映射;关系模型 

中图分类号:TP311.1 文献标识码:A 文章编号:1674—6236(2013)07—0001—04 

Application of Hibernate framework on online exam system 

YE Guang—zai,LIU Xiao—wei 

(Department of Computer Engineering,Dongguan Polytechinic,Dongguan 523808,China) 

Abstract:In system development,we often meet the object model in application and relational model in the database this two 

kinds of not matching mode1.In order to realize the mutual mapping between them,aDd the object information can be easily 

saved into the database table.This paper adopts the Hibernate rfamework to implement object relation mapping(ORM),and 

solves the problem of object model in inheritance,correlation and caching,SO as to reduce the complexity of the code and 

improve the maintainability of the system. 

Key words:examination system;Hibernate framework;object relation mapping;relational model 

在面向对象程序设计时,存在模型不匹配的问题,例如: 系,其中课程为主对象,命题计划为从对象,其关系结构如图 

对象模型的继承、关联、多态等与数据库关系模型中的表、主 

键、外键等概念的阻抗不匹配。如果使用JDBC手工转换,对 

于一些只需要维护一两个表的小系统也许难度不大.但在开 

发中大型的系统需要维护多个表的时候.这种通过手工转换 

的方式,显然是不可取的。 

随着开发技术的不断改进,通过Hibernate框架_ll来实现 

1所示。从对象的主键同时也是外键,它的值与主对象的主键 

值相同,即Course对象couId值与PaperConstnct的conIrd值 

相同,从而形成关联关系。在默认情况下,课程通过查找命题 

计划的主键值是否与其主键值相同来确定该命题计划是否 

与其对应。 

懿course 

啼oouName:vARCHAR(2551 

cOuCredit:INTEGER 

夺couPeriods:I~TEGER 

couAcademic:VARCHAR 255 

奇cOuSemeste r-:VARCHARf255 

对象与关系间的映射将为程序开发人员带来很大的便利。 

Hibernate可以作为数据访问层,负责与数据库进行交互,实 

懿paperconstruct 

J c0nId:INTE6ER 

々COBSta rt:DATETIHE 

现将对象数据保存到数据库或者从数据库中读取数据并封 

装到对象里面。文章中的考试系统采用SHH框架[21实现,在 

此主要介绍Hibernate框架在此系统中的应用。 

conEnd:DATETIME 

c0ursePro ld:INTEGER 

图1课程与命题计划关联关系 

Fig.1 Course and propositional plan relationship 

1对象关系映射实现 

在对象模型与关系模型的映射过程中,Hibernate框架为了 

实现对象模型间的关联关系,采用了一对一、一对多、多对一、多 

关于课程与命题计划的对象模型一对一的关联关系映 

射,在Hibernate框架中.可以在Course.hbm.xml配置文件中 

使用了<one—to—one>标签标识了对象间一对一的关联关系。 

模型Course中通过属性couPaperConstnct与模型 r

PaperConstruct实现一对一映射,下面是配置文件部分代码。 

<class name:“Course”> 

<id name=“coI】Id”> 

对多以及组件等多种关联关系的映射13]。下面将通过在线考试系 

统中对象间的关系来介绍Hibernate的关联关系映射技术。 

1.1一对一关联关系的映射 

在考试系统中,课程与命题计划存在一对一的关联关 

收稿日期:2012一l1—16 稿件编号:20121l133 ‘genera 。r class:“na iVe”/)’ 

基金项目:东莞职业技术学院院级专项课题资助(201lb07) 

作者简介:叶广仔(1981一),男,广东东莞人,硕士,讲师。研究方向:智能系统,高职教育。 

1一 

《电子设计工程}2013年第7期 

<lid> 

<one-to-one name=“couPaperConstruct”lazy=“false”/> 

<class name=“Profession”> 

<id name=“proId”> 

<generator class=”native”/> 

</id> 

<many—to—one name=“proDepartment”column 

模型PaperConstnct中通过属性conCourrse与模型 

Course实现一对一映射,同时指定<generator>标签的class属 

性为“foreign”以

<one—to—one>标签的constrained属性为 

“true”

要求模型PaperConstruct的主键conId也作为外键与 

professionDep

id”lazy=“false”/> 

模型Course的couId值相同,下面是配置文件PaperConstruct. 

1.3多对多关联关系的映射 

hbm.xml的部分代码。 

<class name=“PaperConstruct”> 

在考试系统中.课程与教师存在多对多的关联关系.一 

门课程可以让多个老师担任,同时一个老师也可以担任多门 

课程,其关系结构如图3所示。在对象Course中包含一个 

<id name=“conld”> 

<generator class=“foreign’’> 

<param name=“property”>conCourse</ ̄)aram> 

</generator> 

</id> 

<oBe--to—One name=“conCourse”c0nstrained=“true’’ 

lazy=“false”cascade=“all”/> 

1.2一对多关联关系的映射 

在考试系统中,部门与专业方向存在一对多的关联关 

系.一个部门可以包含多个专业,而一个专业只能属于某一 

部门.譬如计算机工程系包含网络方向、多媒体方向以及信 

息管理方向等,其关系结构如图2所示。在对象Department 

中包含一个Set<Profession>集合,用于存储所含专业,从而形 

成一对多的关联关系。 

图2部门与专业关联关系 

Fig.2 Department and profession relationship 

对于部门与专业对象模型一对多的关联关系映射.模型 

Department中通过属性depPros与模型Profession实现一对 

多的映射,配置文件中使用了<set></set>标签指定depPros属 

性为一个集合,通过<one—to—many>标签的class属性为 

“Profession”,指定集合中的元素为Profession类型,下面是 

Department.hbm.xml配置文件部分代码。 

<class name=“Department’’> 

<id name=“depld”> 

<generator class=“native”/> 

</id> 

<set name=“depPros”inverse=“true”lazy “false” 

cascade=“aU”> 

<key column=“professionDep

_

id”/> 

<one—to—many class=“Profession”/> 

</set> 

Profession.hbm.xml配置文件中设<many—to—one>标签 

的属性column值为“professionDep—id”,使得模型Profession 

的属性proDepartment与模型Department实现多对一的映射 

关系,部分代码如下。 

2- 

Set<Teacher>集合.用于存储担任某一门课的多个教师信息, 

同时在对象Teacher种包含一个Set<Course>集合,用于存储 

该教师担任的多门课程信息,从而形成多对多的关联关系。 

teacher 

teachld:INTEGER 

n teachNomber vARcH^RC2551 

couN… vARCHARf255) teacher

ceurse 

口teachN…VARCHAR  c255) 

CoOoUuCPererdioitd5 一INITNTEGEGERE R J  ̄t…eac ,he r—。 id:。:I NT E  G ER k-- ttea6 B廿1GeI^nhddear:v:CDHATPE( 11 

ouAe

semOSt

ademi

 ̄F:vARCHAR 

o:v^RcH^R侄55

e255)

 

 

I 々t

÷1

oi

nD ̄t

 er

e D^TE 

Pr d.INTEGER 

0 cour¥ ̄Pro

id INTEGER proT rtle v^RcH^R(055) 

execLevel YARCH^Rf 255l 

图3课程与教师关联关系 

Fig.3 Course and teacher relationship 

对于课程与教师对象模型多对多的关联关系映射,在 

Hibernate框架中,可以在Course.hbm.xml中通过<set></set> 

标签指定属性couTeachers为一个集合.使用标签<many—to— 

many>标签中class属性指定集合中元素为Teacher类型,部 

分代码如下。 

<class name=“Cotlrse’’> 

<id name=“couId’’> 

<generator class=“native”/> 

</id> 

<set name=“couTeaehers”table=“teacher

course’’ 

_

inverse=“true”cascade=“all”> 

<key column=“course id”/> 

<many—to—many class=“Teacher”column=“teacher id”/> 

</set> 

在Teacher.hbm.xml配置文件中通过<set></set>标签指定 

属性teachCourses为一个集合,使用标<many~to—many>标 

签中class属性指定集合中元素为Course类型。另外,在< 

set></set>标签中通过参数table指定两个模型通过 

teacher

course表来实现模型Course与模型Teacher的多对 

多的关联关系,部分代码如下。 

<class name=“Teacher”> 

<id name=“teaehld”> 

<generator class=“native”/> 

<lid> 

<set name=“teachCourses”table=“teacher course” 

cascade=“all’’lazy=“false’’> 

<key column=“teacher id”/> 

<many—to—many class=“Course”column= 

叶广仔,等在线考试系统中Hibernate框架的应用 

course

_

id”/> 

</set> 

1.4组件关联关系的映射 

在考试系统中。命题计划包含对各种题型的命题要求, 

即对象命题计划PaperConstruct包含了对象题型需求 

Demand,如图4所示。为了更好地表示这样的一种对象模型 

间的包含关系,在Hibernate框架中,采用了组件关联关系的 

映射方式来实现。 

paperconstruct condemand 

l demid:INTEGER 

—————

●l々demName:VARCHAR(255) 

J 4 demDi仟:INTEGER 

l damMark:lNTEGER 

l夺demCount:INTEGER 

图4命题计划与题型需求关联关系 

Fig.4 Proposition ̄plan and questions demand relationship 

在配置文件PaperConstruct.hbm.xml中.通过标签<set></ 

set>指定属性conDemand为一个集合,存储该命题计划中包 

含的各种题型的命题要求。使用标<composite—element>指 

定集合中的元素为组件,类型为Demand,部分代码如下。 

<class name=“PaperConstruct”> 

<id name="conId”> 

<generator class=“foreign”> 

<param name=‘‘property”>conCourse</param> 

</generator> 

</id> 

<set name=“conDemand”> 

<key column=“demId”/> 

<composite—element class=“Demand”> 

<property name=“demName”/> 

<property name=“demDif”/> 

<property name=“demMark”/> 

<property name=“demCount”,> 

</composite-element> 

</set> 

2考试系统Hibernate框架的实现 

在系统中使用Hibernate框架,首先需要创建及配置 

Hibernate配置文件.然后实现持久化类,以及编写持久化类 

的映射文件。 

1)Hibernate配置文件的设置 

Hibernate配置文件的主要工作是配置SessionFactory。 

SessionFactroy接El负责初始化Hibernate,它充当数据存储源 

的代理,并负责创建Session对象。通过配置dataSource属性 

指定操作的数据库.mappingResources属性指定加载持久化 

类对应的映射文件.hibernateProperties属性指定采用哪种数 

据库的方言、自动建表配置以及是否打印sq1语句等[4],部分 

配置代码如下: 

<bean id=“sessionFactory’’class=“org.springframework. 

O13TI.hibernate4.LocalSessionFactoryBean”> 

<property name=“dataSource”ref=“dataSource”/> 

<property name=“mappingResources”> 

<list> 

<value>cn/edu/dgpt/exam/bean/Course.hbm.xml</value> 

.…..

<value>cn/edu/dgpt/exam/bean/Student. 

hbm.xml</value> 

</list> 

</property> 

<property name=“hibemateProperties”> 

<value> 

hibernate.dialect=org.hibernate.dialect.MySQL5Dialeet 

hibernate.hbm2dd1.auto=update 

hibernate.show

sql=true 

</value> 

</property> 

</bcan> 

2)持久化类的实现 

持久化类是需要被hibernate持久化到数据库中的类【5】, 

持久化类的对象是一个简单Java对象(POJO),一个PO代表 

了与数据库表中某条记录相对应的Hibemate实体,PO的变 

化在事务提交时将反映到实际的数据库表中。考试试卷对应 

的持久化类属性代码如下: 

public class TestPaper implements JSONString{ 

pri。vate int papld;||试卷编号 

pri vate Student papStudent iI考试学生 

pri’vate Date papStart; N考试开始时间 

pri‘vate Date papEnd; ,/考试结束时间 

pri’vate Set<Stirng>papIP; //考试机器IP 

pri‘vate Date papSubmit; //_q.卷时间 

priv ate PaperConsturct papConstruct;||魄卷妥泰 

pri‘vate Map<Stirng,Stirng>papChoise; ,/选择题 

pri vate Map<String,String>papJudge; // ̄,l断题 

pri’vate Set<PaperCompletions >papCompletion: 

空题 

private Map<String,Stirng > papShortAnswer; 

||毹答题 

private Map<String.String>papProgram: ,/编程题 

3)映射文件的实现 

映射文件用来声明Hibernate中持久化类的属性与数据 

库对应表之间字段的映射关系,用于向Hibernate提供关于 

将对象持久化到关系数据库中的信息。映射文件的命名规则 

采用持久化类的类名+后缀名“hbm.xml”的格式。如下代码配 

置了学生类与数据库中Student表的映射关系。 

<hibernate-mapping package=“cn.edu.dgpt.exam.bean”> 

3- 

《电子设计工程}2013年第7期 

<class name=“Student”> 

【2]青岛东合信息技术有限公司,青岛海尔软件有限公司.Java 

EE轻量级解决方案一-S2SH[M】.北京:电子工业出版社, 

2011. 

<id name=“stuld”> 

<generator class=“native”/> 

</id> 

1 

【3]叶健毅.精 ̄Java EE:Eclipse Stntrs 2 Hibernate Spring整合 

应用案例[M].北京:人民邮电出版社,2009. 

[4】欧阳宏基,解争龙,黄素萍,等.一种基于DA0设计模式与 

<property name=“stuNumber”/> 

<property name=“stuName”/> 

<property name=“stuGender”/> 

<property name:“stuBirthday”type=“date”,> 

<many-to-one name=“stuClass”column= 

Hibernate ̄E架的数据持久化层模型【J】.微计算机应用, 

2009,30(3):36—40. 

OU YANG Hongqi,XIE Zheng—long,HUANG Su—ping,et a1. 

A data persistence layer model based on DAO design pattern d”lazy=“false”/> 

studentCla

_

<set name=“stuTestPaper”lazy “flse”cascade: a

and hibernate framework【J].Microcomputer Applications, 

2009,30(3):36—40. 

[5]崔荔,邵春晖,崔磊.J2EE基if-Struts ̄Hibernate¥¥架的新 

all’’> 

d”/> 

<key column=“paperStudent

_

<one—to-many class=“TestPaper”,> 

</set> 

</class> 

闻发布系统分析与设计【J】.电子设计工程,2012,20(15): 

44-47. 

CUI Li,SHAO Chun—hui,CUI Lei.Analysis and design of 

</hibernate—mapping> 

news release system based on J2EE Struts and Hibernate 

3 结束语 

文章主要针对在线考试系统中Hibernate框架的对象关 

系映射的介绍,以及考试系统Hibernate框架的搭建过程,系 

framework[J].Electronic Design Engineeirng,2012,20(15): 

44-47. 

[6】刘盛.基if-JSF ̄wHibernate ̄¥架的订单管理系统编程优化 

技术研究与实现fJ].电脑知识与技术,2012,8(24):5806— 

5809. 

LIU Sheng.The research and implementation on order 

management system programming optimization technology 

统设计还处于初期阶段,下一阶段将针对连接池、数据批量 

处理、session处理进行优化等方面 作进一步的研究,从而提 

高系统的性能。 

参考文献: 

based on JSF and hibernate【J】.Computer Knowledge and 

Technology,2012,8(24):5806—5809. 

[1】陈天河.轻量级web应用开发宝典:Struts 2.1+Hibernate 

3.5+Spring 3.0整合开发【M】.北京:电子工业出版社,2011. 

欧盟资助SYNAPTlC项目研发先进的设计合成工具流 

由欧盟第7框架计划资助的企业学术联盟宣布一项三年期项目圆满结束,并发布了设计合成工具流以及相关的光刻友好 

单元库和评估工具 

SYNA IC研究项目组成员由来自欧洲和巴西的8家产学机构组成,合作目标是研发以创新的规则化为中心的设计方法 

和电子设计自动化(EDA)工具,以降低技术节点升级和先进亚波长光刻技术对逻辑和物理实现效果的限制。 

通过开发新的版图感知型逻辑合成实现方法,SYNA IC项目为欧洲半导体工业解决了关键性问题.如降低系统变异、 

DFM(可制造性设计)和改进良率(单元、IP/宏和系统级)、复杂的面积/性能比以及系统级/架构预测和核签,目标是在先进的纳 

米技术时代继续遵循摩尔定律预测的技术节点升级。 

SYNA IC项目产生的单元库、工具和设计方法可合成并实现多个基于一套缩小的规则版图同时保持相似的面积、功耗 

和时序性能的设计。这些研发成果证明,规则化对变异和可制造性的良性影响不会对其它指标造成不利影响。SYNAPTIC开发 

的良率指标和模型显示,因为大制程窗口,芯片良率可大幅提高,这将立即转化为成本效益,提高制造效率,降低OPC(光学接 

近校正)加工量,加快产品上市。SYNA IC开发的设计流程稳定,设计结果一致,支持产业设计评估。 

通过成功完成所有阶段性开发计划.在不同的设计开发实现阶段和创新的新一类设计合成及单元库自动生成工具中实现 

规则化概念,SYNA IC项目有助于欧洲半导体工业与全球集成器件制造商(IDM)以及远东代工厂同步发展,提高欧洲半导体 

和电子设计自动化企业的市场竞争力。 

此外,SYNA IC在整个项目期间倾力传播研发活动,提高了全球对欧洲学术界半导体研究的关注度。 

咨询编号:2013071001 

4一 


本文标签: 关系 对象 映射 模型 系统