1、 学号:_ 密级:_ 武汉大学本科毕业论文 Spreadsheet Functions Design And Implementation In Enterprise Asset Management企业资产管理系统中电子报表功能的设计和实现院(系)名 称:国际软件学院专 业 名 称 :软件工程学 生 姓 名 :周叶胜指 导 教 师 : 王树良 BACHELORS DEGREE THESIS OF WUHAN UNIVERSITY Spreadsheet Functions Design And Implementation In Enterprise Asset ManagementColl
2、ege :WuHan UniversitySubject :Software EngineeringName :Yesheng ZhouDirected by :Shuliang Wang June 2008郑 重 声 明本人呈交的学位论文,是在导师的指导下,经过小组工程实践,进行大量研究所取得的成果,所有数据、图片资料真实可靠。尽我所知,除文中已经注明引用的内容外,本学位论文的研究成果不包含他人享有著作权的内容。对本论文所涉及的研究工作做出贡献的其他个人和集体,均已在文中以明确的方式标明。本学位论文的知识产权归属于培养单位。本人签名: 日期: 摘要 本论文是基于一个小组完成的企业资产管理系统
3、来撰写,主要讨论了实现这个系统所用到的Struts、Spring、Hibernate技术,它所涉及到的数据库设计。Struts、Spring、Hibernate技术到底是什么,三种技术如何集合在一起,数据库到底应该如何设计等,本文都给出了阐述。 本论文的重点是报表系统,也是基于项目所实现的功能来讨论,主要讨论了本人设计报表的理念和实现报表的原理。报表设计和实现,它与业务和用户的关系甚密,完全了解业务才能设计出符合要求的报表系统。关键词:Struts技术;Spring技术;Hibernate技术;SSH框架;数据库;报表: ABSTRACT This paper is carried out o
4、n the basis of the Enterprise Asset Management system which is produced by our four-people group.This paper mainly introduces the Struts, Spring, Hibernate framework. Meanwhile, it gives the princeples about how to design database basing on the business you are trying to implement.But the point of t
5、his paper is on the spreadsheet. How to design it and how to implement are the keys of spreadsheet. These keys should base on the programs users.Different culture or different education will affect your design. And the flow of the business will affect it too.This paper give details on it. Key words:
6、 Struts;Spring;Hibernate;SSH;database;spreadsheet目录第1章绪论1.1 概述 71.2 项目技术构架71.3 项目技术构架81.4 项目功能简介81.5 论文研究方法8第2章 技术简介2.1 JSP技术简介102.2 Struts简介112.3 Spring简介132.4 Hibernate简介152.5数据库设计介绍192.6 框架整合与配置 20第3章 报表设计和实现3.1 报表设计 223.1.1 业务流程 223.1.2 报表与人物角色243.1.1 报表设计243.2 报表的实现253.2.1 报表实现原理263.2.2 员工购物报表实
7、现283.2.3 经理报表实现293.2.4 报表页面显示实现30结论 32致谢 33第1章绪论1.1 概述企业资产管理在我国企事业单位的资产管理中是一个薄弱环节,也是一个必须要加强的环节。企业资产的流失、闲置、重复采购及责任的不明确等,都导致了企业资产的严重浪费。为了使企业资产能够充分有效的利用,必须对企业资产进行有效的管理。企业资产管理系统是立足企事业单位后勤发展,集数据集成、电子报表、分类汇总、自动生成、网络传递、多极查询于一体的企业资产管理系统,是与现行住房档案管理信息系统和企业资产上报系统相互支持,配套的智能化技术平台,整体上建成运作简便、管理科学、效率很高、最终能实现无纸化办公品牌
8、服务窗口。系统为集中采购提供了技术手段,从资产采购选型开始,提交采购申报,分配到责任人管理维护维修,最后的报废处理的全过程进行管理。记录资产的各种属性,记录资产的变更、报废的情况,提供个人查询、领导查询等多级查询功能。将资产的登记与财务报账连接、资产与责任人挂钩,并与人事部门连接,实现动态实时的查询功能,防止企业资产的流失和浪费。系统还提供耗材管理功能,供网上耗材申领和核发,统计耗材领用情况。1.2项目技术构架由我们小组完成的这个企业资产管理系统所用的框架是比较流行的SSH框架,Struts+Spring+Hibernate这3个框架,Struts我们用的是1.2版本,Spring是2.0版本
9、,Hibernate是3.2的的版本,而我们的数据库使用的是MySQL 5.0版本。使用CMMI软件开发流程,包括需求分析、系统设计、编码实现和测试等。J2EE应用开发技术,应用Java语言、JavaScript、XHTML,Eclipse、Tomcat、SVN、Bugzilla等编程环境和工具;MySQL关系数据库编程。UML建模语言,需求分析和系统设计建模工具,以及有关的软件工程方法;总的来说是一个传统的基于MVC框架模式的WEB项目的开发。1.3企业资产管理系统国内外发展趋势在国内外,企业资产管理系统是一个正在蓬勃发展的新兴企业所必需系统,并且越来越多的受到企业的欢迎和认可。但是,由于还
10、没有健全,就难免会存在一些问题,且不说企业资产管理安全等问题,业务功能的优劣正逐渐成为制约企业资产管理发展的重要因素之一。我国现阶段企业资产管理电子报表存在的几大问题:1. 资产目录不详细2. 资产管理不充分3. 资产流动不灵活4. 系统操作不人性化1.4项目功能简介本系统具有的功能1. 用户登陆:包括用户的登陆,注册;2. 网上超市:包括提供商品的分类浏览、查询及自动生成采购申报表。以及产品信息发布,项目日志管理,产品报价系统;3. 资产核查:核查子系统的技术调研工作,及子系统的实现;4. 通用及专用设备:将专用及通用设备从购买、维修、处置到最后的报废过程进行管理。5. 车辆管理:将车辆从购
11、买、维修、处置到最后的报废过程进行管理;6. 耗材管理:用户可通过网上超市提出耗材领用申请,管理员可通过分类统计及查询功能快速的对申请进行审核,可以有效的避免资产浪费。待审核完成后,用户在领用耗材时,管理员便将其详细信息记录入库;7. 供应商管理系统:包括集中采购及账务报账;8. 系统维护:包括人员信息维护、部门维护、资产编码维护及耗材类别维护。系统的使用者分为员工、总经理、部门经理和系统管理员,不同的企业角色在登陆后所进行的操作和所看到的页面是不一样的1.5论文研究方法独立完成以及参加小组讨论合作。运用所学过的Java知识以及MVC框架的有关技术,先完成自己所负责的电子报表系统模块,然后将小
12、组各成员的成果整合为一个完整的项目。第2章技术简介2.1 JSP技术简介网页可以分为动态页面和静态页面。HTML就是用来写静态页面的,在静态页面上,你无法和服务器互动,只能浏览页面信息。动态页面就不一样了,它可以和服务器端进行交互,你所做的事情不仅仅只是浏览信息,比如:搜索、发帖等。JSP技术是比较流行的用于制作动态页面的一门技术,它涉及到servlet和静态页面的编写。首先JSP中有page、request、session、application4个范围的分化,因为动态变化涉及到页面的跳转等,在操作中会有无数的参数、属性的出现,那么在与服务器进行信息交互的过程中,你就需要分清参数、属性到底是
13、在哪个范围里面,并且清楚了解4个范围的分界。在每个范围里面,都会有取得和设定参数或者属性的方法。JAVA中都是对象调用方法,而JSP中有8个内置对象:pageContext、request、session、application、out、config、page、exception。设定属性的方法是:Public void setAttribute(String name, Object value)获取属性的方法是:Public void setAttribute(String name)举个简单的例子,如:request.setAttribute(username, zhou)就是在requ
14、est范围里面设置一个属性username,它的值是zhourequest.getAttribute(username, zhou)就是获取username这个属性的值request.getParameter(password)就是获取页面中一个参数的值。这样一来,服务器可以获得页面中的任何信息。信息获得后,需要servlet来处理,所以每个功能你都需要写一个相应的servlet来处理,然后将servlet添加到页面中来实现各种功能,比如:跳转页面、根据你的搜索显示结果等等。简单来讲,将servlet和静态页面结合就是动态页面。编写servlet是最主要的,它决定你的功能,而静态页面主要影响视
15、觉效果,也是很重要的。客户所了解的就是能不能用,而第一印象是界面是否符合要求,所以静态页面的设计也很重要。这2个方面都做好了,JSP技术也就基本掌握到了。2.2.Struts简介Struts是一个为开发基于模型(Model)视图(View)控制器(Controller)(MVC)模式的应用架构的开源框架,是利用Java Servlet和JSP构建Web应用的一项非常有用的技术。由于Struts能充分满足应用开发的需求,简单易用,敏捷迅速,因而吸引了众多的开发人员的关注。首先事件是指从客户端页面(浏览器)由用户操作触发的事件,Struts使用Action来接受浏览器表单提交的事件,这里使用了Co
16、mmand模式,每个继承Action的子类都必须实现一个方法execute。struts重要的表单对象ActionForm是一种对象,它代表了一种应用,这个对象中至少包含几个字段,这些字段是Jsp页面表单中的input字段,因为一个表单对应一个事件,所以,当我们需要将事件粒度细化到表单中这些字段时,也就是说,一个字段对应一个事件时,单纯使用Struts就不太可能,当然通过结合JavaScript也是可以转弯实现的。Struts是一个基于Sun J2EE平台的MVC框架,主要是采用Servlet和JSP技术来实现的。Struts把Servlet、JSP、自定义标签和信息资源(message re
17、sources)整合到一个统一的框架中,开发人员利用其进行开发时不用再自己编码实现全套MVC模式,极大的节省了时间,所以说Struts是一个非常不错的应用框架。Struts框架可分为以下四个主要部分:1、模型(Model),本质上来说在Struts中Model是一个Action类(这个会在后面详细讨论),开发者通过其实现商业逻辑,同时用户请求通过控制器(Controller)向Action的转发过程是基于由struts-config.xml文件描述的配置信息的。2、视图(View),View是由与控制器Servlet配合工作的一整套JSP定制标签库构成,利用她们我们可以快速建立应用系统的界面。
18、3、控制器(Controller),本质上是一个Servlet,将客户端请求转发到相应的Action类。4、一堆用来做XML文件解析的工具包,Struts是用XML来描述如何自动产生一些JavaBean的属性的,此外Struts还利用XML来描述在国际化应用中的用户提示信息的(这样一来就实现了应用系统的多语言支持)。 使用Struts时,在搭建好环境后,你所做的事情是:a.编写FORM;b.编写ACTION;c.编写JSP页面;d.改写Struts的配置文件。ACTION是用来实现功能的,就是控制器。FORM是用来传递信息的,它的数据来自客户发出的请求。Struts的原理和流程大概样的:读取配
19、置,总控制器ACTIONSERVLET读取Struts的配置文件,为各个模块初始化对象。用户发出HTTP请求,同时请求的数据会以表单或者URL的形式传送到服务器;填充FORM,先将FORM实例化,再将客户请求的数据填充相应的FORM中的成员对象,保存;将FORM转发到相应的ACTION中去;处理业务,然后返回一个ACTIONFORWARD对象;返回响应,返回的对象可能对用一个JSP页面也可能是一个ACTION;查找响应,查找配置文件来找到对象对应的是哪个页面或者哪个ACTION;响应用户,将对象呈现给用户。FORM就是你所用到的一个表写成一个类,表中的参数就是类中的成员变量。它的工作原理大概是
20、这样的,每次你调用一个ACTION,它就会查找ACTION对应的FORM,如果在scope(request/application)里存在这个FROM,它就会重用。如果没有,它就会实例化出一个,用提交给服务器的数据来填充这个对象,然后由ACTION来进行相应的处理。而ACTION就是负责业务逻辑处理的,类似于JSP中的servlet,所以写好FORM ,写好ACTION,配置好配置文件,就能使用Struts框架了。2.3 Spring简介Spring是一个开源框架,目前在开源社区的人气很旺,被认为是最有前途的开源框架之一。她是由Rod Johnson创建的,她的诞生是为了简化企业级系统的开发。
21、说道Spring就不得不说EJB,因为Spring在某种意义上是EJB的替代品,她是一种轻量级的容器。用过EJB的人都知道EJB很复杂,为了一个简单的功能你不得不编写多个Java文件和部署文件,他是一种重量级的容器。也许你不了解EJB,你可能对“轻(重)量级”和“容器”比较陌生,那么这里我简单介绍一下。A. Spring的初步了解如下是Spring框架图:组成 Spring 框架的每个模块(或组件)都可以单独存在,或者与其他一个或多个模块联合实现。每个模块的功能如下:核心容器:核心容器提供 Spring 框架的基本功能。核心容器的主要组件是 BeanFactory,它是工厂模式的实现。Bean
22、Factory 使用控制反转 (IOC) 模式将应用程序的配置和依赖性规范与实际的应用程序代码分开。Spring 上下文:Spring 上下文是一个配置文件,向 Spring 框架提供上下文信息。Spring 上下文包括企业服务,例如 JNDI、EJB、电子邮件、国际化、校验和调度功能。Spring AOP:通过配置管理特性,Spring AOP 模块直接将面向方面的编程功能集成到了 Spring 框架中。所以,可以很容易地使 Spring 框架管理的任何对象支持 AOP。Spring AOP 模块为基于 Spring 的应用程序中的对象提供了事务管理服务。通过使用 Spring AOP,不用
23、依赖 EJB 组件,就可以将声明性事务管理集成到应用程序中。Spring DAO:JDBC DAO 抽象层提供了有意义的异常层次结构,可用该结构来管理异常处理和不同数据库供应商抛出的错误消息。异常层次结构简化了错误处理,并且极大地降低了需要编写的异常代码数量(例如打开和关闭连接)。Spring DAO 的面向 JDBC 的异常遵从通用的 DAO 异常层次结构。Spring ORM:Spring 框架插入了若干个 ORM 框架,从而提供了 ORM 的对象关系工具,其中包括 JDO、Hibernate 和 iBatis SQL Map。所有这些都遵从 Spring 的通用事务和 DAO 异常层次结
24、构。Spring Web 模块:Web 上下文模块建立在应用程序上下文模块之上,为基于 Web 的应用程序提供了上下文。所以,Spring 框架支持与 Jakarta Struts 的集成。Web 模块还简化了处理多部分请求以及将请求参数绑定到域对象的工作。Spring MVC 框架:MVC 框架是一个全功能的构建 Web 应用程序的 MVC 实现。通过策略接口,MVC 框架变成为高度可配置的,MVC 容纳了大量视图技术,其中包括 JSP、Velocity、Tiles、iText 和 POI。 大家提到Spring时,就会想到“容器”。“容器”,这个概念困扰我好久。从学习Tomcat开始就一直
25、对此感到困惑。感性的来讲,容器就是可以用来装东西的物品。那么在编程领域就是指用来装对象(OO的思想,如果你连OO都不了解,建议你去学习OO先)的对象。然而这个对象比较特别,它不仅要容纳其他对象,还要维护各个对象之间的关系。所谓“重量级”是相对于“轻量级”来讲的,也可以说“轻量级”是相对于重量级来讲的。在Spring出现之前,企业级开发一般都采用EJB,因为它提供的事务管理,声明式事务支持,持久化,分布计算等等都“简化”了企业级应用的开发。我这里的“简化”打了双引号,因为这是相对的。重量级容器是一种入侵式的,也就是说你要用EJB提供的功能就必须在你的代码中体现出来你使用的是EJB,比如继承一个接
26、口,声明一个成员变量。这样就把你的代码绑定在EJB技术上了,而且EJB需要JBOSS这样的容器支持,所以称之为“重量级”。相对而言“轻量级”就是非入侵式的,用Spring开发的系统中的类不需要依赖Spring中的类,不需要容器支持(当然Spring本身是一个容器),而且Spring的大小和运行开支都很微量。一般来说,如果系统不需要分布计算或者声明式事务支持那么Spring是一个更好的选择。B.核心概念在我看来Spring的核心就是两个概念,反向控制(IoC),面向切面编程(AOP)。还有一个相关的概念是POJO,我也会略带介绍。1、POJO我所看到过的POJO全称有两个,Plain Ordin
27、ary Java Object,Plain Old Java Object,两个差不多,意思都是普通的Java类,所以也不用去管谁对谁错。POJO可以看做是简单的JavaBean(具有一系列Getter,Setter方法的类)。严格区分这里面的概念没有太大意义,了解一下就行。2、 IoCIoC的全称是Inversion of Control,中文翻译反向控制或者逆向控制。这里的反向是相对EJB来讲的。EJB使用JNDI来查找需要的对象,是主动的,而Spring是把依赖的对象注入给相应的类(这里涉及到另外一个概念“依赖注入”,稍后解释),是被动的,所以称之为“反向”。3.切面编程(AOP)切面编
28、程就类似于动态代理,比如你写了很多方法,在使用这些方法前需要做很多相同的操作,那样你必须在每个方法前加上很多很多相同的代码,那样你的代码会看起来很冗长,而且写起来很会很让人绝望。切面编程(AOP)技术就能大大的减少你的工作量。AOP技术涉及到的概念有:aspect,就哪些你要重复在其他方法前或后或中间执行的方法;Pointcut,就是声明是哪些方法会被插入aspect;c.Advice,就是声明在pointcut之前还是之后执行;在定义好这三点,你就能实现AOP技术了。2.4 Hibernate简介报表实现和数据库的关系很密切,对Hibernate的介绍会稍为的全面点。Hibernate是一个
29、免费的开源Java包,它使得与关系数据库打交道变得十分轻松,就像您的数据库中包含每天使用的普通Java对象一样,同时不必考虑如何把它们从神秘的数据库表中取出(或放回到数据库表中)。它解放了您,使您可以专注于应用程序的对象和功能,而不必担心如何保存它们或稍后如何找到它们。本文讨论以下内容:历史与背景 大多数应用程序都需要处理数据。Java应用程序运行时,往往把数据封装为相互连接的对象网络,但是当程序结束时,这些对象就会消失在一团逻辑中,所以需要有一些保存它们的方法。有时候,甚至在编写应用程序之前,数据就已经存在了,所以需要有读入它们和将其表示为对象的方法。手动编写代码来执行这些任务不仅单调乏味、
30、易于出错,而且会占用整个应用程序的很大一部分开发工作量。 优秀的面向对象开发人员厌倦了这种重复性的劳动,他们开始采用通常的“积极”偷懒做法,即,创建工具,使整个过程自动化。对于关系数据库来说,这种努力的最大成果就是对象/关系映射(ORM)工具。 这类工具有很多,从昂贵的商业产品到内置于J2EE中的EJB标准。然而,在很多情况下,这些工具具有自身的复杂性,使得开发人员必须学习使用它们的详细规则,并修改组成应用程序的类以满足映射系统的需要。由于这些工具为应付更加严格和复杂的企业需求而不断发展,于是在比较简单和常见的场景中,使用它们所面临的复杂性反而盖过了所能获得的好处。这引起了一场革命,促进了轻量
31、级解决方案的出现,而Hibernate就是这样的一个例子。Hibernate的工作方式 Hibernate不会对您造成妨碍,也不会强迫您修改对象的行为方式。它们不需要实现任何不可思议的接口以便能够持续存在。惟一需要做的就是创建一份 XML“映射文档”,告诉Hibernate您希望能够保存在数据库中的类,以及它们如何关联到该数据库中的表和列,然后就可以要求它以对象的形式获取数据,或者把对象保存为数据。与其他解决方案相比,它几乎已经很完美了。运行时,Hibernate读取映射文档,然后动态构建Java类,以便管理数据库与Java之间的转换。在Hibernate中有一个简单而直观的API,用于对数据
32、库所表示的对象执行查询。要修改这些对象,(一般情况下)只需在程序中与它们进行交互,然后告诉Hibernate保存修改即可。类似地,创建新对象也很简单;只需以常规方式创建它们,然后告诉Hibernate有关它们的信息,这样就能在数据库中保存它们。 Hibernate API学习起来很简单,而且它与程序流的交互相当自然。在适当的位置调用它,就可以达成目的。它带来了很多自动化和代码节省方面的好处,所以花一点时间学习它是值得的。而且还可以获得另一个好处,即代码不用关心要使用的数据库种类(否则的话甚至必须知道)。我所在的公司就曾有过在开发过程后期被迫更换数据库厂商的经历。这会造成巨大的灾难,但是借助于H
33、ibernate,只需要简单地修改Hibernate配置文件即可。这里的讨论假定您已经通过创建Hibernate映射文档,建立了一个关系数据库,并且拥有要映射的Java类。有一个Hibernate“工具集”可在编译时使用,以支持不同的工作流。例如,如果您已经拥有Java类和映射文档,Hibernate可以为您创建(或更新)必需的数据库表。或者,仅仅从映射文档开始,Hibernate也能够生成数据类。或者,它可以反向设计您的数据库和类,从而拟定映射文档。还有一些用于Eclipse的alpha 插件,它们可以在IDE中提供智能的编辑支持以及对这些工具的图形访问。 如果您使用的是Hibernate
34、2环境,这些工具鲜有提供,但是存在可用的第三方工具。使用Hibernate的场合 既然Hibernate看起来如此灵活好用,为什么还要使用其他的工具呢?下面有一些场景,可以帮助您做出判断(或许通过提供一些比较和上下文,可以有助于鉴别非常适用Hibernate的场合)。如果应用对于数据存储的需要十分简单例如,您只想管理一组用户优先选择您根本不需要数据库,更不用说一个优秀的对象-关系映射系统了(即使它也如Hibernate这般易于使用)!从Java 1.4开始,有一个标准的Java Preferences API可以很好地发挥这个作用。(在ONJava文章中可以找到有关Preferences AP
35、I的更多信息。) 对于熟悉使用关系数据库和了解如何执行完美的SQL查询与企业数据库交互的人来说,Hibernate似乎有些碍手碍脚,这就像带有动力和自动排挡的快艇车会使注重性能的赛车驾驶员不耐烦一样。如果您属于这种人,如果您所在的项目团队拥有一个强大的DBA,或者有一些存储过程要处理,您可能想研究一下iBATIS。Hibernate 的创建者本身就把iBATIS当作是另一种有趣的选择。我对它很有兴趣,因为我们曾为一个电子商务站点开发了一个类似的系统(其功能更为强大),而且从那时到现在,我们已经在其他环境中使用过它,尽管在发现Hibernate之后,在新项目中我们通常更喜欢使用Hibernate
36、。您可以认为,以SQL为中心的解决方案(比如iBATIS)是“反向的”对象/关系映射工具,而Hibernate是一个更为传统的ORM。 当然,还有其他的外部原因会导致采用另外的方法。比如,在一个企业环境中,必须使用成熟的EJB架构(或者其他的一些非普通对象映射系统)。可以为提供自己的数据存储工具的平台量身定做代码,比如Mac OS Xs Core Data。使用的可能是像XML DTD这样的存储规范,而它根本不涉及关系数据库。但是,如果您使用的是富对象模型,而且想要灵活、轻松且高效地保存它(无论您是否正要开始或已经决定使用关系数据库,只要这是一个选择而且存在可用的优秀免费数据库,比如MySQL
37、,或可嵌入Java的HSQLDB,它就应该始终是一个选择),那么Hibernate很可能就是您理想的选择。您可能会惊讶于节省的时间之多,以及您将会多么地喜欢使用它。 经过一个月的实践,Hibernate技术需要为每张表写一个对应的类,类中的成员变量是表中每个字段对应的类型和名字。然后,每个对应的类,都需要写出相应的DAO,就是增删改查的方法。这个DAO方法和JDBC中的DAO方法其实差不对,hibernate的方便之处是它能直接保存一个对象进入数据库,那个对象就会成为数据库中的一条记录,而不用像JDBC那样一个字段一个字段的赋值,然后保存。Hibernate的所有操作都是针对对象的,而不是针对
38、表中的某一个字段的,操作简介方便的,深受欢迎。在Hibernate出现的对象有三种状态:1.瞬时,就是一个对象刚刚new出来,还没有关联session;2.持久,就是这个对象与session关联,与数据库的数据有对应,session没有关闭,但是事务没有被提交。一旦事务提交后,它就会对数据库产生影响;3.托管,session已经关闭,数据库中没数据与之对应,对它进行改动是不会影响到数据库的。Hibernate的核心接口一共有5个,分别为:Session、SessionFactory、Transaction、Query和Configuration。这5个核心接口在任何开发中都会用到。通过这些接口
39、,不仅可以对持久化对象进行存取,还能够进行事务控制。下面对这五个核心接口分别加以介绍。Session接口:Session接口负责执行被持久化对象的CRUD操作(CRUD的任务是完成与数据库的交流,包含了很多常见的SQL语句。)。但需要注意的是Session对象是非线程安全的。同时,Hibernate的session不同于JSP应用中的HttpSession。这里当使用session这个术语时,其实指的是Hibernate中的session,而以后会将HttpSesion对象称为用户session。SessionFactory接口:SessionFactory接口负责初始化Hibernate。它
40、充当数据存储源的代理,并负责创建Session对象。这里用到了工厂模式。需要注意的是SessionFactory并不是轻量级的,因为一般情况下,一个项目通常只需要一个SessionFactory就够,当需要操作多个数据库时,可以为每个数据库指定一个SessionFactory。Configuration接口:Configuration接口负责配置并启动Hibernate,创建SessionFactory对象。在Hibernate的启动的过程中,Configuration类的实例首先定位映射文档位置、读取配置,然后创建SessionFactory对象。Transaction接口:Transact
41、ion接口负责事务相关的操作。它是可选的,开发人员也可以设计编写自己的底层事务处理代码。Query和Criteria接口:Query和Criteria接口负责执行各种数据库查询。它可以使用HQL语言或SQL语句两种表达方式。 在熟悉了解三种状态后,你所做的事情就是明确你的业务。开始编写接口,为每个接口写实现类。基本编码流程是:首先,初始化Hibernate,并创建SessionFactory,从中取得Session,开始事务,执行数据库操作,关闭事务,关闭Session。2.5 数据库设计介绍我们使用的是MSql数据库,它是小型数据库,适合小型工程。任何数据库的构建都是需要根据你的业务要求来实
42、现的,比如登陆,看起来就是一个用户和密码而已,但是任何一个项目并不是这样简单的。业务之间的联系时非常密切的。不同的用户,权限不一样,进入后的操作是不一样的。在设计数据库的时候,你必须经过细致的考虑,才能决定库中到底需要什么表,每张表需要哪些字段,以及表和表之间的关系来合理的完成你的业务流程。下面是我们工程中涉及到的数据表:名称描述EMPLOYEE_INFO员工信息表DEPARTMENT_INFO部门信息表MATERIAL_INFO耗材信息表HOUSE_INFO房产信息表EQUIPMENT_INFO通用及专用设备信息表VEHICLE_INFO车辆信息表PURCHASING_INFO网上购物信息表
43、MAINTAIN_INFO维护信息表CODE_INFO分类信息表员工信息表:它是用来描述企业中员工信息的,其中比较重要的字段是名字、密码、职位、所在部门,它们和业务流程关系甚密;部门信息表:记录企业中各个部门的名称;耗材表:记录企业中日常所需的各种耗材使用、储备情况;房产表:记录企业员工的住宿情况和企业的房产使用情况;通用及专用设备信息表:记录企业中设备的借用状况;车辆信息表:记录企业中车辆的借用状况;网上购物信息表:用来记录员工购物申请;维护信息表:记录企业中所有车辆、设备的维修、遗失、报废状况;分类信息表:记录企业中每样物品的所属类型;对与表之间的关系,它们主要通过user这个字段联系起来
44、,user有部门情况、物品的使用也有使用者等等,这样通过user所有的表基本都联系在一起。数据库中的表不是越多越好,字段不是越多越好,一般表的设计要做到第三范式就行。设计者在设计出数据库后,需要插入各种数据,插入记录时,必须要先插入主表中的数据,再插入其他表中的记录。2.6 框架整合与配置这个项目使用了SSH框架,Struts,Spring,Hibernate三种技术不是简单的加在一起,而且在三种框架融合后,你的使用和分别单独使用时完全不一样的。Spring和Hibernate结合后,你只要继承HibernateDaoSupport这个类,你在使用时数据库时,就无需手动去获取Hibernate中的Session,不用手写开启事务,关闭事务,它会提供一个HibernateTemplate,直接使用就能对数据库操作,而且他会自动的关闭Session和事务。当然,你在使用这些简单的编写程序的背后,你需要配置一大堆的配置文件;Spring中,你需要为SessionFactory配置bean,为事务配置等;每个你将会在SSH框架中使用的类和方法,必须在Spring中配置;对于struts,你所有的action都必须写好配置,而Hibernate方面,你所要