




免费预览已结束,剩余52页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
本本 科科 毕毕 业业 论论 文文 基于基于 J2EEJ2EE 的工作流引擎的设计与实现的工作流引擎的设计与实现- 数据持久层数据持久层 Research and Implementation of Persistence Layer of a J2EE-based Workflow Engine 姓 名: 学 号: 学 院:软件学院 系:软件工程 专 业:软件工程 年 级: 指导教师: 年年 月月 摘摘 要要 在市场竞争日趋激烈的情况下,企业纷纷建立办公信息系统来辅助业务活动, 以期提高企业工作效率,改善企业经营管理水平,降低企业生产成本,加快企业 反应速度,从而在竟争中占得先机。但是,传统的企业信息系统多以数据为中心, 主要着眼于提高个人的工作效率,而对企业内需要多人或多个部门协作完成的 业务过程的支持不足,因此对提高企业整体的生产效率的作用有限。工作流技 术正是从通过提高企业整体协作效率来提高企业生产效率的角度出发,以企业 业务过程为核心,不仅提供对业务过程中的单个活动的支持,而且对活动之间 的联系提供自动化或半自动化的支持。 在基于J2EE的工作流引擎中,数据持久层负责存储从应用到数据库的数据, 也负责数据的检索、更新和删除,因此持久层的解决方案是整个系统的关键所 在。目前,对持久层的实现存在多种解决方案,例如JDBC、EJB、ODBMS以及ORM 等。在这些方案中直接使用JDBC运行效率最高,但DAO对象和SQL语言耦合太过 紧密;EJB的功能强大,但使用复杂且不够灵活ODBMS和JDO是两种有发展前景的技 术,但目前都还处在不成熟阶段。ORM是一种较为理想的解决方案。在众多的ORM 工具中Hibernate是免费而且开源的,并且有丰富的文档和稳定的开发背景,因 此本文提出利用Hibernate实现物工作流引擎的持久层的解决方案。 关键字关键字:工作流引擎;持久层;Hibernate Abstract With increasing competition in the market, the enterprises have set up office information systems to support operational activities with a view to improving the efficiency of enterprises, improve the level of enterprise management, reduce production costs and speed up the reaction rate enterprises, which account for the competition must first machine. However, traditional enterprise information systems and more data-centric, the main focus on improving the efficiency of individuals, enterprises need to collaborate more than the completion of a number of departments or the lack of support of business processes, and therefore improve the overall productivity limited role. Workflow technology is from a collaboration by improving the overall efficiency of enterprises, to enterprises as the core business processes, not only to provide a single course of business support activities, but also the links between activities to provide automated or semi-automatic support. In a J2EE-based workflow engine, data persistence layer is responsible for storage to the database from the application of the data, is also responsible for data retrieval, update and delete, so persistence layer solution is the key to the whole system. ORM tools in Java objects and mapping between database tables in order to form a relatively independent object persistence layer, thereby reducing the J2EE applications and database coupling and simplify the development process. In many ORM tool Hibernate is free and open source, and has a wealth of documents and the development of a stable background, this paper proposed the use of Hibernate objects workflow engine to achieve a lasting solution layer. Key words:Workflow Engine;Persistance Layer;Hibernate 目目 录录 第一章第一章 绪论绪论1 1.1 项目背景项目背景1 1.2 选题意义选题意义1 1.3 项目分工项目分工1 1.4 本文结构本文结构2 第二章第二章 工作流引擎简介工作流引擎简介3 2.1 工作流概念工作流概念3 2.2 工作流引擎概念工作流引擎概念3 2.3 工作流引擎研究现状工作流引擎研究现状4 2.4 本章小结本章小结4 第三章第三章 工作流引擎总体设计工作流引擎总体设计6 3.1 系统模块设计系统模块设计6 3.2 领域模型设计领域模型设计7 3.2.1 系统用例图7 3.2.2 系统包图8 3.2.3 整体流程图9 3.3 本章小结本章小结10 第四章第四章 持久层相关技术持久层相关技术12 4.1 ORM 组件组件12 4.1.1 ORM 概念12 4.1.2 ORM 组件12 4.2 HIBERNATE 简介简介 .14 4.2.1 持久化类14 4.2.2 集合类映射16 4.3 对象对象/关系数据库映射关系数据库映射.17 4.4 关联关系映射关联关系映射23 4.4.1 多对一的单向关联23 4.4.2 一对一的单向关联24 4.4.3 一对多的单向关联24 4.5 本章小结本章小结25 第五章第五章 数据持久层的详细设计数据持久层的详细设计26 5.1 总体设计总体设计26 5.2 数据模型设计数据模型设计26 5.2.1 数据模型图.26 5.2.2 用户表(User).28 5.2.3 消息表(Message).28 5.2.4 自定义流程表(IProcess).29 5.2.5 表单表(Sheet)29 5.2.6 自定义表单表(Isheet).30 5.2.7 自定义流程步骤(Iprocess_step).30 5.2.8 表单项表(Sheet_item).31 5.2.9 流程表(User).31 5.2.10 流程步骤表(Process_step)32 5.2.11 自定义表单项表(Isheet_item)32 5.3 本章小结本章小结33 第六章第六章 数据持久层的实现数据持久层的实现34 6.1 持久化数据的实现持久化数据的实现34 6.1.1 DAO 层设计描述34 6.1.2 com.yp.bus.UserDAO 类:.34 6.1.3 com.yp.bus.SheetDAO 类35 6.1.4 com.yp.bus.ProcessDAO 类 35 6.2 安全性的实现安全性的实现36 6.3 本章小结本章小结36 第七章第七章 总结总结37 参考文献参考文献38 致谢致谢39 CONTENT CHAPTER 1 INTRO .1 1.1 BACKGROUND.1 1.2 GOAL.1 1.3 WORK DIVISION.1 1.4 PAPER STRUCTURE2 CHAPTER 2 WORKFLOW ENGINE 3 2.1 WORKFLOW 3 2.2 WORKFLOW ENGINE.3 2.3 CURRENT STUDY 4 2.4 CHAPTER CONCLUSION.4 CHAPTER 3 OVERALL DESIGN 6 3.1 SYSTEM MODULE DESIGN.6 3.2 DOMAIN MODEL DESIGN.7 3.2.1 system usage diagram 7 3.2.2 system package diagram 8 3.2.3 overall circuit .9 3.3 CHAPTER CONCLUSION.10 CHAPTER 4 PERSISTENCE LAYER12 4.1 ORM COMPONENT.12 4.1.1 ORM.12 4.1.2 ORMcomponent.12 4.2 HIBERNATE INTRO.14 4.2.1 persistence class.14 4.2.2 collection class mapping16 4.3 O/R DATABASE MAPPING.17 4.4 CORRELATIONSHIP MAPPING.23 4.4.1 many-to-one mapping 23 4.4.2 one-to-one mapping .24 4.4.3 one-to-many mapping 24 4.5 CHAPTER CONCLUSION.25 CHAPTER 5 PL DESIGN.26 5.1 OVERALL DESIGN26 5.2 DATA MODEL DESIGN26 5.2.1 Data model diagram.26 5.2.2 User table .28 5.2.3 Message table.28 5.2.4 Iprocess table29 5.2.5 Sheet table29 5.2.6 Isheet table .30 5.2.7 Iprocess_step table.30 5.2.8 Sheet_item table.31 5.2.9 User table .31 5.2.10 Process_step table 32 5.2.11 Isheet_item table 32 5.3 CHAPTER CONCLUSION.33 CHAPTER 6 DPL IMPLEMENTATION34 6.1 DATA PERSISTENCE IMPLEMENTATION34 6.1.1 DAO layer design.34 6.1.2 com.yp.bus.UserDAO class .34 6.1.3 com.yp.bus.SheetDAO class35 6.1.4 com.yp.bus.ProcessDAO class.35 6.2 SAFETY36 6.3 CHAPTER CONCLUSION.36 CHAPTER 7 CONCLUSION .37 REFERRENCE 38 ACKNOWLEDGEMENT.39 厦门大学本科毕业论文 1 第一章第一章 绪论绪论 1.1 项目背景项目背景 电子商务阶段初期,企业通过引进不同领域的专业软件来完成各个部门的 不同任务。例如,财务部门通过财务软件来规范财务人员的工作并提高帐目查 询的效率;EXCEL 提高员工画表格的效率;ERP 系统通过优化资源配置来实现人 力、财务和物资部门的效益最大化。 然而随着电子商务大潮的一轮轮高潮迭起,谁能扼住时间的脉搏,谁就占 得了市场先机。企业对商用办公系统提出了越来越高的要求。除了需要上述专 业软件来分门别类的从不同角度完成企业任务,企业需要一种工具,从业务逻 辑上来缩短企业流程的时间,以取得市场霸主的地位。 发端于 20 世纪 70 年代的工作流技术很好的满足了企业的这一需要。工作 流系统在结合企业具体业务逻辑的基础上,将企业的业务流程形成系统上的流 程化,大大节约了各业务环节之间限制时间,提高了企业的工作效率,进而提 高企业的效益。 1.2 选题意义选题意义 在当今商用网络系统开发中,J2EE 当属最为主流的技术。本课题顺应科技 发展的潮流,在学习工作流引擎相关技术的基础上,设计并实现一个基于 J2EE 的工作流表单审批系统。该系统的实现将从企业业务逻辑出发,将企业在业务 逻辑环节上的闲置时间缩短,提高企业办公效率。 1.3 项目分工项目分工 课题组成员周新飞,负责系统业务逻辑层的设计和实现;邓凯元负责界面 层的设计和实现;负责数据持久层的设计和实现。 本论文将着重介绍基于 J2EE 的工作流引擎系统的数据持久层的设计与实现。 厦门大学本科毕业论文 2 1.4 本文结构本文结构 本文旨在研究工作流引擎在企业中的应用,重点提出数据持久层的设计和 实现方法。本文共分为 7 个章节,内容如下: 第一章:绪论。主要阐述了课题的项目背景、选题意义、研究内容,并介 绍项目组成员以及小组成员分工。 第二章:工作流引擎简介。介绍了有关工作流的相关概念、工作流引擎的 相关概念,以及工作流引擎的研究现状以及当今发展趋势。 第三章:工作流引擎总体设计。主要介绍了基于工作流平台的设计思路、 体系结构、功能划分、模块设计。 第四章:持久层相关技术。简单介绍了 ORM 组件的概念与选择,HIBERNATE 数据库技术,对象关系数据库映射和关联关系映射。 第五章:数据持久层的详细设计。详细介绍了数据持久层的总体领域模型 设计以及各个表单的结构与关联关系。 第六章:数据持久层的实现。介绍了基于 J2EE 的工作流引擎的数据持久层 的具体实现方法。 第七章:总结全文,说明进一步的研究方向。 厦门大学本科毕业论文 3 第二章第二章 工作流引擎简介工作流引擎简介 2.1 工作流概念工作流概念 工作流(Work Flow)就是工作流程的计算模型,即将工作流程中的工作如 何前后组织在一起的逻辑和规则在计算机中以恰当的模型进行表示并对其实施 计算。工作流要解决的主要问题是:为实现某个业务目标,在多个参与者之间, 利用计算机,按某种预定规则自动传递文档、信息或者任务。简单地说,工作 流就是一系列相互衔接、自动进行的业务活动或任务。我们可以将整个业务过 程看作是一条河,其中流过的河水就是工作流。 工作流属于计算机支持的协同工作(Computer Supported Cooperative Work,CSCW)的一部分。后者是普遍地研究一个群体如何在计算机的帮助下实 现协同工作的。 许多公司采用纸张表单,手工传递的方式,一级一级审批签字,工作效率 非常低下,对于统计报表功能则不能实现。而采用工作流软件,使用者只需在 电脑上填写有关表单,会按照定义好的流程自动往下跑,下一级审批者将会收 到相关资料,并可以根据需要修改、跟踪、管理、查询、统计、打印等,大大 提高了效率,实现了知识管理,提升了公司的核心竞争力。 2.2 工作流引擎概念工作流引擎概念 所谓工作流引擎(Workflow Engine)是指工作流作为应用系统的一部分, 并为之提供对各应用系统有决定作用的根据角色、分工和条件的不同决定信息 传递路由、内容等级等核心解决方案。例如开发一个系统最关键的部分不是系 统的界面,也不是和数据库之间的信息交换,而是如何根据业务逻辑开发出符 合实际需要的程序逻辑并确保其稳定性、易维护性(模块化和结构化)和弹性 (容易根据实际业务逻辑的变化作出程序上的变动,例如决策权的改变、组织 结构的变动和由于业务方向的变化产生的全新业务逻辑等等) 。 工作流引擎解 决的就是这个问题:如果应用程序缺乏强大的逻辑层,势必变得容易出错(信 息的路由错误、死循环等等) 。 厦门大学本科毕业论文 4 2.3 工作流引擎研究现状工作流引擎研究现状 在国内,目前办公自动化研究主要集中在企业应用平台的整合,各种应用 系统的集成(包括 WEB、DBMS 等应用系统) ,各种办公自动化软件产品的接口 的设计,以及基于分布式架构的平台设计等方面。OA 系统与其它信息系统的整 合,简化了应用层面,根据业务变更和需求来扩展新功能,从而提升办公自动 化在企业及政府部门当中的应用。在银行、保险、邮电、海关、证券、税务、 电力等领域和政府机关都包含了许多的业务流程,建设各类信息系统的重要工 作之一就是发现用户的工作流程,进行分析建模,并把它体现到信息系统的设 计中。应用工作流管理系统的开发人员通过可视化的方式分析和设计业务流程, 将各个不同的应用系统联接在一起;在组织结构和业务发生变化时,能够在很 少修改甚至不修改原来应用的情况下,仅仅通过修改工作流程的定义就能适应 变化了的情况。工作流技术的发展为办公自动化、企业信息平台和企业业务平 台的整合带来了强大的技术支持。 随着互联网的普及,Web 无处不在、价格低廉并且容易使用,因此也出现 了一些基于 Web 的工作流解决方案。Web 浏览器提供了统一的、使用自然方便 的用户界面,并让用户可以在任何计算平台上参与到工作流中,而不需要添加 任何额外的硬件。通过对当前商品化的基于 Web 技术的工作流管理系统的观察, 显示出大多数产品都仅仅是可以部分地使用 Web,但是发展的趋势是越来越多 地使用面向 Web,这种趋势可以在的一些研究项目中体现出来,如 AcrionTechMetro, OzWeb, DartFlow。但是由于 Web 及浏览器本身的限制,只 能提供 Client/Server 计算模式,并且所使用的 CGI 接口只有有限的编程能 力,在位置透明性、支持事务功能、安全性、性能等方面还有待于进一步改善。 2.4 本章小结本章小结 自 19 世界 70 年代工作流思想诞生以来,工作流引擎的发展已经历经了 30 多个年头。30 多年里,工作流引擎被越来越多的行业所引用到日常的项目及日 常管理工作当中,消费品行业,制造业,电信服务业,银证险等金融服务业, 厦门大学本科毕业论文 5 物流服务业,物业服务业,物业管理,大中型进出口贸易公司,政府事业机构, 研究院所及教育服务业等,特别是大的跨国企业和集团公司,都有工作流引擎 的身影。 本章主要介绍了工作流以及工作流引擎的相关概念以及工作流引擎的研究现 状以及发展历史。 厦门大学本科毕业论文 6 第三章第三章 工作流引擎总体设计工作流引擎总体设计 3.1 系统模块系统模块设计设计 根据功能实现的不同提供我们进行模块的划分如图 3-1: 填 写 表 单 用户 管理员经理 查 看 表 单 定 义 表 单 定 义 流 程 审 批 表 单 查 看 表 单 工作流 在 线 聊 天 人 事 管 理 图图 3-13-1 功能模块图功能模块图 具体模块功能如下所述: (1)用户身份验证。用户进入该系统,首先要进行身份验证,如果为合法 用户,才能进入应用桌面,否则无法进入系统。 (2)用户注册。普通用户要进入系统,应该想进行信息注册,并用管理员 进行角色分配,才能对系统进行操作。 (3)管理员定义表单。管理员应该现对所要用到的表单进行定义,之后用 户才可能使用到该表单。 厦门大学本科毕业论文 7 (4)管理员对定义的表单关联流程。只有关联了流程的表单才可能投入使 用,管理员可以对表单审批流程进行定义,表单就自动会关联相应的流程,然 后进行流程审批。 (5)用户使用表单。用户选择有关联流程的相应表单,然后进行填写,提 交后系统会自动按照流程定义进行分配,交由相应的经理审批该表单。 (6)在线查看提交的表单状态。用户可以在线查看已经提交的表单的状态, 及时了解自己请求是否被审批。 (7)经理对用户提交的表单进行审批。经理首先可查看当前需要审批的表 单及其理由,并可详细查看表单内容,然后进行审批,一旦审批通过,改表单 会被分配到下一个审批经理,直至整个流程结束,用户表单即审批成功。 (8)经理可以对已经审批表单进行查看。查看自己所审批的表单以便有据 可查。 (9)在线聊天。用户可以看到在线的人员列表,并可对其发送信息,在线 和其他人进行交流。该功能作为工作流系统的附加功能,会在一定程度上提高 系统的方便性以及实用性。 3.2 领域模型领域模型设计设计 3.2.1 系统用例图系统用例图 厦门大学本科毕业论文 8 System User Manager Admin 义义 Identify System 义义义义 义义义义 义义义义 义义义义 义义义义义义 义义义义 图图 3-23-2 用例图用例图 从以上用例图可以看出,系统主要分为三个用户角色,其中管理员主要用 于表单定义及其流程关联,用户使用表单,并由经理审批,实现一个自动化的 工作流管理。 3.2.2 系统包图系统包图 客户端使用浏览器进行事务请求,调用服务器端的 action 进行处理,由于 filter 以及拦截器 intercepter 的存在,系统首先会执行相应的操作,然后由 action 调用业务层的 service 处理程序,执行相应的业务逻辑。此时,service 会根据需要调用持久层的 DAO,进行数据库的操作。 厦门大学本科毕业论文 9 UI Application Server request Persistence InterceptorAction Service ServiceImpl DAODAOImpl response 图图 3-33-3 包图包图 3.2.3 整体流程图整体流程图 厦门大学本科毕业论文 10 工作流系统 经理用户管理员 定义表单 流程关联 提交表单 审批表单 填写表单内容 表单实例 定义流程 自定义表单 列表 未审批列表 已审批列表 流程实例 图图 3-43-4 流程图流程图 整个工作流系统的过程为:管理员首先自定义表单,然后进行流程的定义 及关联表单;此时,用户便可使用该表单,填写完表单的内容后提交该表单, 提交的表单由系统自动分发到审批经理处;经理查看需要审批的表单说明或者 详细内容,对表单进行审批,系统会根据流程定义的链条将表单传到下一个流 程,直到整个流程处理结束,表单通过审批,整个工作流程结束。 3.3 本章小结本章小结 本章着重介绍了工作流引擎的详细设计,包括系统的模块划分,并结合系 厦门大学本科毕业论文 11 统用例图、包图和流程图详细说明了系统的总体设计。 厦门大学本科毕业论文 12 第四章第四章 持久层相关技术持久层相关技术 4.1ORM 组件组件 4.1.1 ORM 概念概念 ORM是英文Object Relation Mapping的缩写,所谓ORM,即对象关系映射, 是将Java对象保存到关系型数据库表的一种持久化技术,这里的“持久化”概 念,即是指将数据保存到断电后仍可保存数据的设备(比如数据库或文件)中。 众所周知,当前主流开发技术是面向对象的开发技术,而当前主流数据库 却是关系型数据库。要将面向对象开发技术中的对象保存到关系型数据库的表 中,涉及到映射的工作,即将对象所对应的类映射到关系型数据库的表、将类 的属性映射到表中的字段、将某个对象映射到表中的某个具体记录,像这样的 将对象持久化到关系型数据库的映射过程即为对象关系映射。 4.1.2 ORM 组件组件 为了能将对象持久化到关系型数据库中,必须进行 ORM操作。开发者可 以通过JDBC的方式,通过手工编码进行 ORM操作,然而这种操作存在着如下 的弊端: (1)要求开发者对 SQL语句非常熟悉,包括 SQL的增、删、改、查等语 句及多表交叉查询,正如之前所提到的,对于大多数开发者而言不可能像 DBA那样对SQL语句有如此高的熟悉度。此外,在实际项目开发中,一个数据 库中通常存在数十甚至数百张表,这些表之间有着错综复杂的关系,要对这 些表准确地进行多表查询绝非易事。 (2)开发效率低,这主要体现在以下几个方面: 对于一个有数十个字段的表结构而言,手工编写针对其的insert, 1 update及select语句是一个非常繁琐的过程。 对于已经编写完成的 SQL语句代码,一旦表结构发生变化,需要相应 厦门大学本科毕业论文 13 地修改着这些代码。 如果查询语句涉及到多张表的话,需要精心地构建相应的多表查询语 句。对这些语句进行编写和调试的过程是非常复杂和困难的。 得到查询结果(在 JDBC中为ResultSet)后,需要手工将其包装到相 应的实体对象中,对于一些庞大的表结构而言,这又是一项繁琐的工作。 正是基于以上这些弊端,诞生了 ORM组件,ORM组件能有效地封装对进 行ORM操作的底层细节,使开发者无需过多地去关心那些底层的SQL语句, 从而专注于实际业务的开发。 具体而言,使用 ORM组件的优势体现在以下几方面: insert, update及select等SQL语句,将由 ORM组件根据配置文件来生 成并封装成相应的方法,开发者只需调用那些方法即可。 由于底层语句已被封装成了相应的方法,即使表结构发生变化,也无 需再改动相关代码,只要修改一下配置文件即可。 多表查询工作将由组件自动完成并封装到相应的类中,开发者只需通 过类的getters方法就能得到想要的结果。 组件将自动把查询结果包装到相应的类中。 表表2-12-1:几种数据持久化的解决方案:几种数据持久化的解决方案 优点缺点 SQL/JDBC 成熟,流行,使用DAO模 式 代码繁杂,可读性差,维 护和移植困难 JDO 简单,透明,标准不够成熟 Apache OJB 稳定性好,属于Apache 基金组织 文档资源少,支持标准太 多成了负担 (ODMG3.0,JDO1.0) iBATIS 可以控制更多的数据库持久层封装不够彻底,只 厦门大学本科毕业论文 14 操作细节。适用于遗留 系统的改造和对既有数 据库的复用。 是一个DBHelper Hibernate 成熟,流行,功能强大, 并逐渐发展成Java持久 层事实上的标准 透明度较低 4.2HIBERNATE 简介简介 在今日的企业环境中,把面向对象的软件和关系数据库一起使用可能是相 当麻烦、浪费时间的。Hibernate是一个面试Java环境的对象/关系数据库映射 工具。 Hibernate不仅仅管理Java类到数据库表的映射(包括Java数据类型到SQL 数据类型的额映射) ,还提供数据查询和获取数据的方法,可以大幅度减少开发 是人工使用SQL和JDBC处理数据的时间。 Hibernate的目标是对于开发者通常的数据持久化相关的编程任务,解放其 中的95%。对于以数据为中心的程序来说,它们往往只在数据库中使用存储过程 来实现商业逻辑,Hibernate可能不是最好的解决方案;对于那些在基于Java的 中间层应用中,他们实现面向对象的业务模型和商业逻辑的应用,Hibernate是 最有用的。不管怎样,Hibernate一定可以帮助你消除或者包装那些针对特定厂 商的SQL代码,并且帮你把结果集从表格式的表示形式转换到一系列的对象去。 4.2.1 持久化类持久化类 (1)概念 在应用程序中,用来实现业务问题实体的(如在电子商务应用程序中的 Customer和Order)类就是持久化类。不能认为所有的持久化类的实力都是持久 的状态-一个实例的状态也可能是瞬时的或脱管的。 厦门大学本科毕业论文 15 如果这些持久化类遵循一些简单的规则,Hibernate能够工作的更好,这些 规则也被称作简单传统Java对象(POJO:Plain Old Java Object)编程模型。 (2)规则 所有的持久化类都必须有一个默认的构造方法(可以不是public的),这 样的话Hibernate就可以使用Constructor.newInstance()来实例化它们。在 Hibernate中,为了运行期代理的生成,构造方法至少是包(package)内可见 的。 持久化类有一个属性叫id。这个属性映射数据库表的主键字段。这个属 性可以叫任何名字,其类型可以是任何的原始类型、原始类型的包装类型、 java.lang.String或者是java.util.Date。 代理(proxies)是Hibernate的一个重要的功能,它依赖的条件是,持 久化类或者是非final的,或者是实现了一个所有方法都声明为public的接口。 可以用Hibernate持久化一个没有实现任何借口的final类,但不能使用代理来 延迟关联加载,否则会限制进行性能优化的选择。 在关系数据库schema和类的内部数据结构之间引入间接层会好一些。默 认情况下Hibernate持久化JavaBeans风格的属性,认可get,is和set这种形式的 方法名。也可以对某些特定属性实行直接字段访问。属性不需要声明为public 的,Hibernate可以持久化一个有default、protected或private的get/set方法 对属性进行持久化。 (3)动态模型 运行期的持久化实体没有必要一定表示为像POJO类或JavaBean对象那样的 形式。Hibernate也支持动态模拟(在运行期使用Map的Map)和像DOM4J的树模 型那样的实体表示。使用这种方法可以只写映射文件而不需写持久化类。 Hibernate默认工具在普通POJO模式。可以使用配置选项 default_entity_mode,对特定的SessionFactory,设置一个默认的实体表示模 式。 在映射文件中,首先要声明entity-name来代替一个类名(或作为一种附属) 。 在使用 dynamic-map 为 SessionFactory 设置了默认的实体模式之后,可以在运 厦门大学本科毕业论文 16 行期间使用 Map 的 Map。动态映射的好处是,变化所需要的时间少了,因为原 型不需要实现实体类,但无法进行编译期的类型检查,并可能由此会处理很多 的运行期异常。Hibernate 映射时的数据库的 schema 能容易的规格化和合理化, 并允许稍后在此之上添加合适的领域模型实现。 4.2.2 集合类映射集合类映射 (1)持久化集合类 Hibernate要求持久化集合值字段必须声明为接口,比如: public class Product private String serialNumber; private Set parts = new HashSet(); public Set getParts()return parts; void setParts(Set parts) this.parts = parts; public String getSerialNumber() return serialNumber; void setSerialNumber(String sn) serialNumber = sn; 根据不同的接口类型,被Hibernate注射的持久化集合类的表现类似 HashMap,HashSet,TreeMap,TreeSet或者ArrayList。 集合类实例具有值类型的通常行为。当被持久化对象引用后,他们会自动 被持久化,当不再被引用后,自动被删除。假若实例被从一个持久化对象传递 到另一个,它的元素可能从一个表转移到另一个表。两个实体不能共享同一个 集合类实例的引用。因为底层关系数据库模型的原因,集合值属性无法支持空 值语义;Hibernate对空的集合引用和空集合不加区别。 (2)集合映射 用于映射集合类的 Hibernate 映射元素取决于接口的类型。比如,元 素用来映射 set 类型的属性。 厦门大学本科毕业论文 17 除了,还有,和映射元 素。具有代表性: name:集合属性的名称。 table:这个集合表的名称。 schema:表的schema名称,将覆盖在根元素中定义的schema。 lazy:可以用来关闭延迟加载,指定一直使用预先抓取,或者打开 “extra-lazy”抓取,此时大多数操作不会初始化集合类。 inverse:标记这个集合作为双向关联关系中的方向一端。 cascade:让操作级联到子实体。 sort:指定集合的排序顺序,其可以为自然的或者给定一个用来比较的 类。 order-by:指定表的字段再加上asc或者desc,定义Map,Set和Bag的迭代 顺序。 where指定任意的SQL where条件,该条件将在重新 或者删除这个集合时 使用。 厦门大学本科毕业论文 18 fetch:用于在外连接抓取、通过后续select抓取和通过后续subselect 抓取之间选择。 4.3 对象对象/关系数据库映射关系数据库映射 对象和关系数据库之间的映射通常是用一个XML文档来定义的。这个映射文 档被设计为易读的,并且可以手工修改。映射语言是以Java为中心,这意味着 映射文档是按照持久化类的定义来创建的,而非表的定义。除了通过手写生成 XML映射文档,也有一些工具可以用来生成映射文档,例如Xdoclet,Middlegen 和AndroMDA。 (1)hibernate-mapping 这个元素包括一些可选的属性。Schema和catalog属性,指明了这个映射所 连接(refer)的表所在的schema名称。假若制定了这个属性,表明会加上所制 定的schema和catalog的名字扩展为全限定名。假若没有指定,表名就不会使用 全限定名。Default-cascade制定了未明确注明cascade属性的Java属性和集合 类Hibernate会采取什么样的默认级联风格。auto-import属性默认让我们在查 询语言中可以使用非全限定名的类名。 schema:数据库schema的名称。 catalog:数据库catalog的名称。 default-cascade:默认的级联风格。 default-access:Hibernate用来访问所有属性的策略。可以通过实现 PropertyAccessor接口自定义。 default-lazy:制定了未明确注明lazy属性的Java属性和集合类, Hibernate会采取什么样的默认加载风格。 厦门大学本科毕业论文 19 auto-import:指定我们是否可以在查询语言中使用非全限定的类名。 package:指定一个包前缀,如果在映射文档中没有指定全限定的类名, 就使用这个作为包名。 (2)property 元素为类定义了一个持久化的JavaBean风格的属性。 name:属性的名字,以小写字母开头。 column:对应的数据库字段名。也可以通过嵌套的元素指定。 type:一个Hibernate类型的名字。 update,insert:表明用于UPDATE和/或INSERT的SQL语句中是否包含这 个 被映射了的字段。这二者如果都设置为false则表明这是一个外源性的属性, 它的值来源于映射到同一个或多个字段的某些其他属性,或者通过一个 trigger或其他程序生成。 formula:一个SQL表达式,定义了这个计算属性的值。计算属性没有和 它 对应的数据库字段。 厦门大学本科毕业论文 20 access:Hibernate用来访问属性值的策略。 lazy:指定实例变量第一次被访问时,这个属性是否延迟抓取。 unique:使用DDL为该字段添加唯一的约束。同样,允许它作为 property-ref引用的目标。 not-null:使用DDL为该字段添加可否为空的约束。 optimistic-lock:指定这个属性在做更新是是否需要获得乐观锁定。换 句话说,它决定这个属性发生脏数据时版本的值是否增长。 typename可以是如下几种: Hibernate基本类型名。 一个Java类的名字,这个类属于一种默认基础类型。 一个可以序列化的Java类的名字。 一个自定义类型的类的名字。 如果没有指定类型,Hibernate会使用反射来得到这个名字的属性,一次来 猜测正确的Hibernate类型。Hibernate会按照规则2,3,4的顺序对属性读取器 的返回类进行解释。然而,在某些情况下,仍然需要type属性。 access属性用来控制Hibernate如何在运行时访问属性。在默认情况下, Hibernate会使用属性的get/set方法对。如果指明access=“field” , Hibernate会忽略get/set方法对,直接使用反射来访问成员变量。也可以通过 制定自己的策略,实现perty.PropertyAccessor接口,再在 access中设置自定义策略类的名字。 衍生属性是一个特别强大的特征。这些属性应该定义为只读,属性值在装 载时计算生成。你用一个SQL表达式生成计算的结果,它会在这个实例转载时翻 译成一个SQL查询的SELECT子查询语句。 (3)多对一 通过many-to-one元素,可以定义一种常见的鱼另一个持久化类的关联。这 厦门大学本科毕业论文 21 种关系模型是多对已关联(实际上是一个对象引用注释):这个表的一个外键 引用目标表的主键字段。 name:属性名。 column:外键字段名。它可以通过嵌套的元素指定。 class:关联的类的名字。 cascade:指明哪些操作会从父对象级联到关联的对象。 fetch:在外链接抓取和序列抓取两者中选择其一。 update,insert指定对应的字段是否包含在用于UPDATE和/或INSERT的 SQL语句中。如果二者都是false,则这是一个纯粹的外源性关联,它的值是通 过映射到同一个或多个字段的某些其他属性得到或者通过trigger或其他程序生 成。 access:Hibernate用来访问属性的策略。 unique:使用DDL为外键字段生成一个唯一约束。此外,这也可以用作 厦门大学本科毕业论文 22 property-ref的目标属性。这使管理同时具有一对一的效果。 not-null:使用DDL为外键字段生成一个非空约束。 optimistic-lock:指定这个属性在做更新时是否需要获得乐观锁定。 lazy:默认情况下,单点关联是经过代理的。lazy=“no-proxy”指定此 属性应该在实例变量第一次被访问时应该延迟抓取。lazy=“false”指定此关 联总是被预先抓取。 cascade属性设置为除了none以外任何有意义的值,它将把特定的操作传递 到关联对象中这个值就代表着Hibernate基本操作的名称, persist,merge,delete,save- update,evict,replicate,lock,refresh,以及特别的值delete-orphan和 all,并且可以哦哟那个都好分隔符来组合这些操作。 (4)一对一 持久化对象之间的一对一关联关系是通过one-to-one元素定义的。 name:属性的名字。 class:被关联的类的名字。 cascade:表明操作是否从父对象级联到被关联的对象。 constrained:表明该类对应的表对应的数据库表,和被关联的对象所对 应的数据库表之间,通过一个外键引用对逐渐进行约束。这个选项影响save方 法和delete方法在级联执行时的先后顺序以及决定该关联能否被委托。 厦门大学本科毕业论文 23 fetch:在外链接抓取或者序列选择抓取选择其一。 property-ref:指定关联类的属性名,这个属性名将会和本类的主键相 对 应。如果没有指定,会使用对方关联类的主键。 access:Hibernate用来访问属性的策略。 formula:绝大多数一对一的关联都指向其实体的主键。在一些少见的情 况 中,可能会指向其他的一个或多个字段,或者是一个表达式,这些情况下,你 可以用一个SQL公式来表示。 laze:默认情况下,单点关联是经过代理的。lazy=“no-proxy”指定此 属性应该在实例变量第一次被访问时应该延迟抓取。lazy=“false”指定此关 联总是被预先抓取。 entity-name:被关联的类的实体名。 有两种不同的一对一关联:主键关联和唯一外键关联。 主键关联不需要额外的表字段:如果两行是通过这种一对一关系相关联的, 那么这两行就共享同样的主关键字值。 比如对下面的Employee和Person进行主键一对一关联: 为了保证PERSON和EMPLOYEE中相关的字段是相等的,使用一个被称为 foreign的特殊的hibernate标识符生成策略: employee . 一个刚刚保存的Person实例被赋予和该Person的employee属性所指向的 Employee实例同样的关键字值。 厦门大学本科毕业论文 24 另一种方式是一个外键和一个唯一关键字对应,上面的Emplyee和Person的 例子,如果使用这种关联方式,可以表达成: 如果在 Person 的映射加入下面几句,这种关联就是双向的: 4.4 关联关系映射关联关系映射 4.4.1 多对一的单向关联多对一的单向关联 单向多对一关联是最常见的单向关联关系。 4.4.2 一对一的单向关联一对一的单向关联 基于外键关联的单向一对一关联和单向多对一关联几乎是一样的。唯一的 不同就是单向一对一关联中的外键字段具有唯一性约束。 厦门大学本科毕业论文 25 4.4.3 一对多的单向关联一对多的单向关联 基于外键关联的单向一对多关联是一种很少见的情况。 4.5 本章小结本章小结 本章简单介绍了 ORM 组件的概念以及比较选择,HIBERNATE 的相关技术基 础,对象关系数据库映射以及关联关系映射的相关知识。 厦门大学本科毕业论文 26 第五章第五章 数据持久层的详细设计数据持久层的详细设计 5.1 总体设计总体设计 领域模型可以作为设计软件对象的灵感来源,对于描述软件类,软件架构 领域层或有职责的软件对象具有重要的启发作用。它是对领域内的概念或现实 世界中对象的可视化表示。本系统的领域模型如图 5-1 所示: 厦门大学本科毕业论文 27 Manager User Admin ISheetIProcessISheet_item IProcess_stepcontained-in *contained-in * define define
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025杭州上城区国有资本运营集团有限公司招聘3人模拟试卷及完整答案详解一套
- 2025德州齐河县事业单位“人才回引计划”考前自测高频考点模拟试题附答案详解(完整版)
- 2025湖南岳阳市平江县第四人民医院公开招聘临聘人员5人考前自测高频考点模拟试题及1套完整答案详解
- 2025河南郑州惠济区迎宾路社区卫生服务中心招聘2人考前自测高频考点模拟试题完整答案详解
- 2025北京海淀区人大附中西山学校教师招聘考前自测高频考点模拟试题及答案详解(新)
- 2025吉林二道江区政府专职消防员招聘1人考前自测高频考点模拟试题及答案详解(名师系列)
- 2025年滁州南谯城市投资控股集团有限公司招聘10人考前自测高频考点模拟试题及完整答案详解
- 2025安徽工程大学部分专业技术岗位招聘2人模拟试卷完整参考答案详解
- 2025年河南省职工医院-国际口腔中心招聘18人模拟试卷附答案详解(突破训练)
- 2025汾西矿业井下操作技能人员招聘300人(山西)模拟试卷及答案详解1套
- 小儿过敏性紫癜护理常规
- 敬老院财务管理培训
- 胰源性糖尿病的护理
- 医学知识 鼻腔鼻窦内翻性RU头状瘤(SNIP)的影像诊断与鉴别诊断学习课件
- 《证券基础知识》课件
- 九年级数学第一次月考卷 北师大版
- DL∕T 2541-2022 架空输电线路货运索道
- (完整版)排球理论课教案
- 新闻文体的翻译课件
- 学业质量标准
- 判断中药质量变异现象及防治
评论
0/150
提交评论