高校教务管理系统是一个复杂的信息管理系统,它的用户不仅涉及教师、学生还包含了整个高校中的所有部门、院系、管理员等,这些都是构成高校教务系统的关键要素。而本文所设计的系统是基于Java EE体系结构和分布式应用模型,在这种体系架构下,可以让系统用户不必考虑使用的时间和地点,用户可以通过任何一台与高校校园网相连的计算机完成相应的应用功能,极大的方便了用户使用的过程,同时也节约了高校的人力和物力。
在本系统的设计中,程序、数据库和其他的一些中间件都集中在系统的服务器上,而用户所使用的客户端只需要安装有浏览器和必要的上网装置之外,不需要使用其他任何的组件和插件,这就极大的方便了用户的使用。另外,本系统整合了校园内分散的数据资源,统一搭建了数据平台,所有用户使用和查询的数据都来源于同一个数据源,这就保证了数据的及时性和完整性。同时,由于系统是在Java EE体系架构下设计的,当有新的业务逻辑或者原有的业务逻辑发生变化时,只需要修改服务器端的对应的个别程序组件即可,对于控制器或其他的组件,特别对于用户的使用没有任何的影响,这就极大的提高了系统维护和扩展功能。
本文主要对系统的关键部分进行了详细的设计,并对持久化层的实现进行了详细的说明。
一、系统持久化层的设计与实现
1 持久化对象模型的设计
本系统运用了Hibernate实现对象的持久化。Hibernate是为了避免使用传统而繁杂的JDBC操作数据库的方式,采用了对象/关系映射机制来支持数据库的开发,从而实现了以面向对象的方式来操纵数据库,保证了系统面向对象的特性和开发方式,体现了面向对象的分析、设计和开发流程。在系统利用面向对象的方法操纵数据库时需要从数据库的二维表中抽象出其特性,并进行封装,定义出相应的对象,把这些对象抽象成对应的类,之后在服务器运行时,这些对象被持久化的保存形成了持久化对象PO。本节以学生选课系统为例来说明持久化对象的建立过程和方法。
选课系统的主要功能是为学生、选修课程和教师之间建立一个交互平台,教师通过该系统可以开设各种选修课程,学生可以通过该系统选择自己感兴趣的课程。当选课过程结束后,系统会将选择同一门课的学生编入同一个临时班级从而方便排课系统对开设的选修课程进行课表编排操作。
根据以上的分析,可以将整个选课系统的持久化类设计为以下几种:Admin 系统管理员对象、Course 选修课程对象、Student 学生对象、Teacher 教师对象、LsBj临时班级对象、Bj班级对象、Xk选课对象。
在轻量级的Java EE框架下SSH的设计中,系统所定义的PO对象都是以独立对象的形式进行定义的,也就是任何模块都可以使用这些定义好的PO对象,但其实这些PO对象隐含这复杂的相互关系,分析这些对象的关系也是建立Hibernate中持久化对象操作的前提,下面就对选课系统的持久化对象进行分析。
课程对象Course、学生对象Student、教师对象Teacher、选课对象Xk、班级对象Bj和临时班级对象LsBj,这些PO对象看似独立,却存在着复杂的联系,他们之间的类关系如图1所示,当选修课程开设时,一位教师可以开设多门选修课程,而一门课程也可以由多位教师来授课,因此Teacher与Course对象存在着多对多的关系。
另外,课程开设后,学生可以参与选课操作,一个学生可以选修一门或多门课程,而一门课程也可以由多个学生选修,因此Student与Course之间也是多对多的关系。高校的学生入学后会被编入班级中,一个班级可以包含多个学生对象,而一个学生只能从属于唯一的一个班级对象,因此学生与班级对象之间是多对一的关系。
通过上述的业务分析,对选课系统的PO对象和他们之间的关联进行分析,建立选课系统的持久化对象的关系类图,如图1所示。
2 持久化对象的创建
从以上的类关系图中可以看出,选课系统的持久化对象的关联关系是通过PO对象的内部属性的方式表现出来的,这些属性与其他属性类似,赋值和取值操作都是通过set和get方法进行定义。同时,这些PO对象将来会于数据库中表的字段相对应,Hibernate框架会将数据库的表结构进行反转映射,与PO对象映射起来,这样上层应用系统就可以用面向对象的程序方法来访问数据库的关系表。
Hibernate对于持久化对象没有特殊的要求,只需要持久化对象提供下无参数的构造函数即可,当持久化对象之间的关系有多方出现是,需要在PO对象中重新定义一个集合属性来表示多方的状态,下面就以“Teacher教师持久化对象”部分实现代码为例:
public class Teacher implements java.io.Serializable {
private String teacherBh;//教师编号
private String teacherName;//教师姓名
private String szYx; //教师所在院系
private Date teacherBirthday; //教师出生年月
private Date teacherWorkTime; //教师参加工作时间
private Set courses=new HashSet();//教师开设的选修课程集合
public String getTeacherBh() {
return teacherBh;
}
public void setTeacherBh(String teacherBh) {
this.teacherBh = teacherBh;
}
二、 持久化对象模型与关系模型的转换
通过上面的分析与设计,可以得到选课系统的关键持久化对象类,按照Hibernate框架的对象到关系的映射规定,可以将这些定义的持久化对象反转映射成对应的关系表,其对应关系为:持久化对象类—数据库关系表,类属性—关系表字段,持久化对象—关系表记录。下面以“课程表”的转换表为例(见表1)。
三、对象-关系映射文件的建立
在Hibernate的框架中,以对象/关系映射技术来实现从持久化对象到关系对象的转换,该技术的核心思想就是将独立的对象模型和关系模型之间用对象-关系映射文件来一一对应起来。在本文前面的叙述中,我们已经完成了数据库中关系模型和应用系统中持久化对象的建立,这样使应用系统只需要访问java对象来完成对数据库表的访问,而不需要直接访问数据库,但他们直接的映射需要借助于配置文件*.hbm.xml来实现。
在Hibernate框架中,*.hbm.xml配置文件中定义了Java对象和数据
库关系表的对应关系,主要包括:Java类—数据库表,Java对象—表中的记录,Java类的属性—关系表字。之后框架将持久化对象传送给数据访问对象,由数据访问对象来实现系统业务逻辑操作,从而良好的的实现了业务逻辑对象和数据对象的分离。
在Hibernate中定义PO时,每一个PO对象都会定义一个相应同名的*.hbm.xml文件,用来描述PO对象和数据库表或者其他的对象之间的关联关系,这样对于PO对象来说都是独立定义的,但在*.hbm.xml文件的定义中,这些独立的组件就会产生复杂的关联。下面我们就根据前面章节对选课系统的分析和PO对象的建立,为每个对象创建其相应的*.hbm.xml文件,分别是:Teacher.hbm.xml、Student.hbm.xml、Course.hbm.xml、Xk.hbm.xml、Bj.hbm.xml、LsBj.hbm.xml、Admin.hbm.xml。
由于各个映射文件的结构相似,因此我们下面只对课程Course.hbm.xml映射文件的部分实现代码举例:
Mapping file autogenerated by MyEclipse Persistence Tools
结语
本文主要根据教务管理系统的特点,利用轻量级Java EE对系统进行详细的设计和实现,并且详细介绍了系统关键部分持久化层的实现,描述了系统持久化对象的建模过程和PO的建立的过程,并给出了相应的代码。最后,利用对象-关系映射原则将PO对象转换成了数据库的关系表,给出了数据库表的逻辑结构。
参考文献
[1]李磊.基于J2EE构建的远程教学平台的设计与实现[D].大连海事大学,2004.