收藏 分享(赏)

基于J2EE的工作流引擎的设计与实现 数据持久层.doc

上传人:wo7103235 文档编号:6260643 上传时间:2019-04-03 格式:DOC 页数:57 大小:740.50KB
下载 相关 举报
基于J2EE的工作流引擎的设计与实现 数据持久层.doc_第1页
第1页 / 共57页
基于J2EE的工作流引擎的设计与实现 数据持久层.doc_第2页
第2页 / 共57页
基于J2EE的工作流引擎的设计与实现 数据持久层.doc_第3页
第3页 / 共57页
基于J2EE的工作流引擎的设计与实现 数据持久层.doc_第4页
第4页 / 共57页
基于J2EE的工作流引擎的设计与实现 数据持久层.doc_第5页
第5页 / 共57页
点击查看更多>>
资源描述

1、本 科 毕 业 论 文基于 J2EE 的工作流引擎的设计与实现-数据持久层Research and Implementation of Persistence Layer of a J2EE-based Workflow Engine姓 名:学 号:学 院:软件学院系:软件工程专 业:软件工程年 级:指导教师: 年 月摘 要在市场竞争日趋激烈的情况下,企业纷纷建立办公信息系统来辅助业务活动,以期提高企业工作效率,改善企业经营管理水平,降低企业生产成本,加快企业反应速度,从而在竟争中占得先机。但是,传统的企业信息系统多以数据为中心,主要着眼于提高个人的工作效率,而对企业内需要多人或多个部门协作完

2、成的业务过程的支持不足,因此对提高企业整体的生产效率的作用有限。工作流技术正是从通过提高企业整体协作效率来提高企业生产效率的角度出发,以企业业务过程为核心,不仅提供对业务过程中的单个活动的支持,而且对活动之间的联系提供自动化或半自动化的支持。在基于J2EE的工作流引擎中,数据持久层负责存储从应用到数据库的数据,也负责数据的检索、更新和删除,因此持久层的解决方案是整个系统的关键所在。目前,对持久层的实现存在多种解决方案,例如JDBC、EJB、ODBMS以及ORM等。在这些方案中直接使用JDBC运行效率最高,但DAO对象和SQL语言耦合太过紧密;EJB的功能强大,但使用复杂且不够灵活ODBMS和J

3、DO是两种有发展前景的技术,但目前都还处在不成熟阶段。ORM是一种较为理想的解决方案。在众多的ORM工具中Hibernate是免费而且开源的,并且有丰富的文档和稳定的开发背景,因此本文提出利用Hibernate实现物工作流引擎的持久层的解决方案。关键字:工作流引擎;持久层;HibernateAbstractWith increasing competition in the market, the enterprises have set up office information systems to support operational activities with a view to

4、 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

5、 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 overal

6、l 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

7、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 persis

8、tence 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 engi

9、ne to achieve a lasting solution layer.Key words:Workflow Engine;Persistance Layer;Hibernate目 录第一章 绪论 11.1 项目背景 11.2 选题意义 11.3 项目分工 11.4 本文结构 2第二章 工作流引擎简介 32.1 工作流概念 32.2 工作流引擎概念 32.3 工作流引擎研究现状 42.4 本章小结 4第三章 工作流引擎总体设计 63.1 系统模块设计 63.2 领域模型设计 73.2.1 系统用例图 73.2.2 系统包图 83.2.3 整体流程图 93.3 本章小结 10第四章 持久层

10、相关技术 124.1 ORM 组件 124.1.1 ORM 概念 124.1.2 ORM 组件 124.2 HIBERNATE 简介 .144.2.1 持久化类 144.2.2 集合类映射 164.3 对象/关系数据库映射 .174.4 关联关系映射 234.4.1 多对一的单向关联 234.4.2 一对一的单向关联 244.4.3 一对多的单向关联 244.5 本章小结 25第五章 数据持久层的详细设计 265.1 总体设计 265.2 数据模型设计 265.2.1 数据模型图 .265.2.2 用户表(User ) .285.2.3 消息表(Message) .285.2.4 自定义流程表

11、(IProcess) .295.2.5 表单表(Sheet) 295.2.6 自定义表单表(Isheet ) .305.2.7 自定义流程步骤(Iprocess_step) .305.2.8 表单项表(Sheet_item) .315.2.9 流程表(User ) .315.2.10 流程步骤表(Process_step) 325.2.11 自定义表单项表(Isheet_item) 325.3 本章小结 33第六章 数据持久层的实现 346.1 持久化数据的实现 346.1.1 DAO 层设计描述 346.1.2 com.yp.bus.UserDAO 类: .346.1.3 com.yp.bu

12、s.SheetDAO 类 356.1.4 com.yp.bus.ProcessDAO 类 356.2 安全性的实现 366.3 本章小结 36第七章 总结 37参考文献 38致谢 39CONTENTCHAPTER 1 INTRO .11.1 BACKGROUND .11.2 GOAL .11.3 WORK DIVISION.11.4 PAPER STRUCTURE2CHAPTER 2 WORKFLOW ENGINE 32.1 WORKFLOW 32.2 WORKFLOW ENGINE .32.3 CURRENT STUDY 42.4 CHAPTER CONCLUSION.4CHAPTER 3

13、OVERALL DESIGN 63.1 SYSTEM MODULE DESIGN .63.2 DOMAIN MODEL DESIGN .73.2.1 system usage diagram 73.2.2 system package diagram 83.2.3 overall circuit .93.3 CHAPTER CONCLUSION.10CHAPTER 4 PERSISTENCE LAYER124.1 ORM COMPONENT .124.1.1 ORM.124.1.2 ORMcomponent.124.2 HIBERNATE INTRO.144.2.1 persistence c

14、lass .144.2.2 collection class mapping 164.3 O/R DATABASE MAPPING.174.4 CORRELATIONSHIP MAPPING .234.4.1 many-to-one mapping 234.4.2 one-to-one mapping .244.4.3 one-to-many mapping 244.5 CHAPTER CONCLUSION.25CHAPTER 5 PL DESIGN .265.1 OVERALL DESIGN265.2 DATA MODEL DESIGN265.2.1 Data model diagram .

15、265.2.2 User table .285.2.3 Message table .285.2.4 Iprocess table295.2.5 Sheet table 295.2.6 Isheet table .305.2.7 Iprocess_step table .305.2.8 Sheet_item table .315.2.9 User table .315.2.10 Process_step table 325.2.11 Isheet_item table 325.3 CHAPTER CONCLUSION.33CHAPTER 6 DPL IMPLEMENTATION 346.1 D

16、ATA PERSISTENCE IMPLEMENTATION346.1.1 DAO layer design.346.1.2 com.yp.bus.UserDAO class .346.1.3 com.yp.bus.SheetDAO class 356.1.4 com.yp.bus.ProcessDAO class.356.2 SAFETY 366.3 CHAPTER CONCLUSION.36CHAPTER 7 CONCLUSION .37REFERRENCE 38ACKNOWLEDGEMENT .39厦门大学本科毕业论文1第一章 绪论1.1 项目背景电子商务阶段初期,企业通过引进不同领域的

17、专业软件来完成各个部门的不同任务。例如,财务部门通过财务软件来规范财务人员的工作并提高帐目查询的效率;EXCEL 提高员工画表格的效率;ERP 系统通过优化资源配置来实现人力、财务和物资部门的效益最大化。然而随着电子商务大潮的一轮轮高潮迭起,谁能扼住时间的脉搏,谁就占得了市场先机。企业对商用办公系统提出了越来越高的要求。除了需要上述专业软件来分门别类的从不同角度完成企业任务,企业需要一种工具,从业务逻辑上来缩短企业流程的时间,以取得市场霸主的地位。发端于 20 世纪 70 年代的工作流技术很好的满足了企业的这一需要。工作流系统在结合企业具体业务逻辑的基础上,将企业的业务流程形成系统上的流程化,

18、大大节约了各业务环节之间限制时间,提高了企业的工作效率,进而提高企业的效益。1.2 选题意义在当今商用网络系统开发中,J2EE 当属最为主流的技术。本课题顺应科技发展的潮流,在学习工作流引擎相关技术的基础上,设计并实现一个基于 J2EE的工作流表单审批系统。该系统的实现将从企业业务逻辑出发,将企业在业务逻辑环节上的闲置时间缩短,提高企业办公效率。1.3 项目分工课题组成员周新飞,负责系统业务逻辑层的设计和实现;邓凯元负责界面层的设计和实现;负责数据持久层的设计和实现。本论文将着重介绍基于 J2EE 的工作流引擎系统的数据持久层的设计与实现。厦门大学本科毕业论文21.4 本文结构本文旨在研究工作

19、流引擎在企业中的应用,重点提出数据持久层的设计和实现方法。本文共分为 7 个章节,内容如下:第一章:绪论。主要阐述了课题的项目背景、选题意义、研究内容,并介绍项目组成员以及小组成员分工。第二章:工作流引擎简介。介绍了有关工作流的相关概念、工作流引擎的相关概念,以及工作流引擎的研究现状以及当今发展趋势。第三章:工作流引擎总体设计。主要介绍了基于工作流平台的设计思路、体系结构、功能划分、模块设计。第四章:持久层相关技术。简单介绍了 ORM 组件的概念与选择,HIBERNATE数据库技术,对象关系数据库映射和关联关系映射。第五章:数据持久层的详细设计。详细介绍了数据持久层的总体领域模型设计以及各个表

20、单的结构与关联关系。第六章:数据持久层的实现。介绍了基于 J2EE 的工作流引擎的数据持久层的具体实现方法。第七章:总结全文,说明进一步的研究方向。厦门大学本科毕业论文3第二章 工作流引擎简介2.1 工作流概念工作流(Work Flow)就是工作流程的计算模型,即将工作流程中的工作如何前后组织在一起的逻辑和规则在计算机中以恰当的模型进行表示并对其实施计算。工作流要解决的主要问题是:为实现某个业务目标,在多个参与者之间,利用计算机,按某种预定规则自动传递文档、信息或者任务。简单地说,工作流就是一系列相互衔接、自动进行的业务活动或任务。我们可以将整个业务过程看作是一条河,其中流过的河水就是工作流。

21、 工作流属于计算机支持的协同工作(Computer Supported Cooperative Work,CSCW)的一部分。后者是普遍地研究一个群体如何在计算机的帮助下实现协同工作的。 许多公司采用纸张表单,手工传递的方式,一级一级审批签字,工作效率非常低下,对于统计报表功能则不能实现。而采用工作流软件,使用者只需在电脑上填写有关表单,会按照定义好的流程自动往下跑,下一级审批者将会收到相关资料,并可以根据需要修改、跟踪、管理、查询、统计、打印等,大大提高了效率,实现了知识管理,提升了公司的核心竞争力。2.2 工作流引擎概念所谓工作流引擎(Workflow Engine)是指工作流作为应用系统

22、的一部分,并为之提供对各应用系统有决定作用的根据角色、分工和条件的不同决定信息传递路由、内容等级等核心解决方案。例如开发一个系统最关键的部分不是系统的界面,也不是和数据库之间的信息交换,而是如何根据业务逻辑开发出符合实际需要的程序逻辑并确保其稳定性、易维护性(模块化和结构化)和弹性(容易根据实际业务逻辑的变化作出程序上的变动,例如决策权的改变、组织结构的变动和由于业务方向的变化产生的全新业务逻辑等等) 。 工作流引擎解决的就是这个问题:如果应用程序缺乏强大的逻辑层,势必变得容易出错(信息的路由错误、死循环等等) 。厦门大学本科毕业论文42.3 工作流引擎研究现状在国内,目前办公自动化研究主要集

23、中在企业应用平台的整合,各种应用系统的集成(包括 WEB、 DBMS 等应用系统) ,各种办公自动化软件产品的接口的设计,以及基于分布式架构的平台设计等方面。OA 系统与其它信息系统的整合,简化了应用层面,根据业务变更和需求来扩展新功能,从而提升办公自动化在企业及政府部门当中的应用。在银行、保险、邮电、海关、证券、税务、电力等领域和政府机关都包含了许多的业务流程,建设各类信息系统的重要工作之一就是发现用户的工作流程,进行分析建模,并把它体现到信息系统的设计中。应用工作流管理系统的开发人员通过可视化的方式分析和设计业务流程,将各个不同的应用系统联接在一起;在组织结构和业务发生变化时,能够在很少修

24、改甚至不修改原来应用的情况下,仅仅通过修改工作流程的定义就能适应变化了的情况。工作流技术的发展为办公自动化、企业信息平台和企业业务平台的整合带来了强大的技术支持。随着互联网的普及,Web 无处不在、价格低廉并且容易使用,因此也出现了一些基于 Web 的工作流解决方案。Web 浏览器提供了统一的、使用自然方便的用户界面,并让用户可以在任何计算平台上参与到工作流中,而不需要添加任何额外的硬件。通过对当前商品化的基于 Web 技术的工作流管理系统的观察,显示出大多数产品都仅仅是可以部分地使用 Web,但是发展的趋势是越来越多地使用面向 Web,这种趋势可以在的一些研究项目中体现出来,如 Acrion

25、TechMetro, OzWeb, DartFlow。但是由于 Web 及浏览器本身的限制,只能提供 Client/Server 计算模式,并且所使用的 CGI 接口只有有限的编程能力,在位置透明性、支持事务功能、安全性、性能等方面还有待于进一步改善。2.4 本章小结自 19 世界 70 年代工作流思想诞生以来,工作流引擎的发展已经历经了 30多个年头。30 多年里,工作流引擎被越来越多的行业所引用到日常的项目及日常管理工作当中,消 费 品 行 业 , 制 造 业 , 电 信 服 务 业 , 银 证 险 等 金 融 服 务 业 ,厦门大学本科毕业论文5物 流 服 务 业 , 物 业 服 务 业

26、 , 物 业 管 理 , 大 中 型 进 出 口 贸 易 公 司 , 政 府 事 业 机 构 ,研 究 院 所 及 教 育 服 务 业 等 , 特 别 是 大 的 跨 国 企 业 和 集 团 公 司 , 都 有 工 作 流 引 擎的 身 影 。本 章 主 要 介 绍 了 工 作 流 以 及 工 作 流 引 擎 的 相 关 概 念 以 及 工 作 流 引 擎 的 研 究 现状 以 及 发 展 历 史 。厦门大学本科毕业论文6第三章 工作流引擎总体设计3.1 系统模块设计根据功能实现的不同提供我们进行模块的划分如图 3-1:填写表单用户管理员 经理查看表单定义表单定义流程审批表单查看表单工作流在线

27、聊天人事管理图 3-1 功能模块图具体模块功能如下所述:(1)用户身份验证。用户进入该系统,首先要进行身份验证,如果为合法用户,才能进入应用桌面,否则无法进入系统。(2)用户注册。普通用户要进入系统,应该想进行信息注册,并用管理员进行角色分配,才能对系统进行操作。(3)管理员定义表单。管理员应该现对所要用到的表单进行定义,之后用户才可能使用到该表单。厦门大学本科毕业论文7(4)管理员对定义的表单关联流程。只有关联了流程的表单才可能投入使用,管理员可以对表单审批流程进行定义,表单就自动会关联相应的流程,然后进行流程审批。(5)用户使用表单。用户选择有关联流程的相应表单,然后进行填写,提交后系统会

28、自动按照流程定义进行分配,交由相应的经理审批该表单。(6)在线查看提交的表单状态。用户可以在线查看已经提交的表单的状态,及时了解自己请求是否被审批。(7)经理对用户提交的表单进行审批。经理首先可查看当前需要审批的表单及其理由,并可详细查看表单内容,然后进行审批,一旦审批通过,改表单会被分配到下一个审批经理,直至整个流程结束,用户表单即审批成功。(8)经理可以对已经审批表单进行查看。查看自己所审批的表单以便有据可查。(9)在线聊天。用户可以看到在线的人员列表,并可对其发送信息,在线和其他人进行交流。该功能作为工作流系统的附加功能,会在一定程度上提高系统的方便性以及实用性。3.2 领域模型设计3.

29、2.1 系统用例图厦门大学本科毕业论文8SystemUserManagerAdmin义 义Identify System义 义 义 义义 义 义 义义 义 义 义义 义 义 义义 义 义 义 义 义义 义 义 义图 3-2 用例图从以上用例图可以看出,系统主要分为三个用户角色,其中管理员主要用于表单定义及其流程关联,用户使用表单,并由经理审批,实现一个自动化的工作流管理。3.2.2 系统包图客户端使用浏览器进行事务请求,调用服务器端的 action 进行处理,由于filter 以及拦截器 intercepter 的存在,系统首先会执行相应的操作,然后由action 调用业务层的 service

30、 处理程序,执行相应的业务逻辑。此时,service会根据需要调用持久层的 DAO,进行数据库的操作。厦门大学本科毕业论文9UIApplication ServerrequestPersistenceInterceptor ActionServiceServiceImplDAO DAOImplresponse图 3-3 包图3.2.3 整体流程图厦门大学本科毕业论文10工作流系统经理用户管理员定义表单流程关联提交表单审批表单填写表单内容表单实例定义流程自定义表单列表未审批列表已审批列表流程实例图 3-4 流程图整个工作流系统的过程为:管理员首先自定义表单,然后进行流程的定义及关联表单;此时,用

31、户便可使用该表单,填写完表单的内容后提交该表单,提交的表单由系统自动分发到审批经理处;经理查看需要审批的表单说明或者详细内容,对表单进行审批,系统会根据流程定义的链条将表单传到下一个流程,直到整个流程处理结束,表单通过审批,整个工作流程结束。3.3 本章小结本章着重介绍了工作流引擎的详细设计,包括系统的模块划分,并结合系厦门大学本科毕业论文11统用例图、包图和流程图详细说明了系统的总体设计。厦门大学本科毕业论文12第四章 持久层相关技术4.1ORM 组件4.1.1 ORM 概念ORM是英文Object Relation Mapping的缩写,所谓ORM,即对象关系映射,是将Java对象保存到关

32、系型数据库表的一种持久化技术,这里的“持久化”概念,即是指将数据保存到断电后仍可保存数据的设备(比如数据库或文件)中。众所周知,当前主流开发技术是面向对象的开发技术,而当前主流数据库却是关系型数据库。要将面向对象开发技术中的对象保存到关系型数据库的表中,涉及到映射的工作,即将对象所对应的类映射到关系型数据库的表、将类的属性映射到表中的字段、将某个对象映射到表中的某个具体记录,像这样的将对象持久化到关系型数据库的映射过程即为对象关系映射。4.1.2 ORM 组件为 了 能 将 对 象 持 久 化 到 关 系 型 数 据 库 中 , 必 须 进 行 ORM操 作 。 开 发 者 可以 通 过 JD

33、BC的 方 式 , 通 过 手 工 编 码 进 行 ORM操 作 , 然 而 这 种 操 作 存 在 着 如 下的 弊 端 : ( 1) 要 求 开 发 者 对 SQL语 句 非 常 熟 悉 , 包 括 SQL的 增 、 删 、 改 、 查 等 语句 及 多 表 交 叉 查 询 , 正 如 之 前 所 提 到 的 , 对 于 大 多 数 开 发 者 而 言 不 可 能 像DBA那 样 对 SQL语 句 有 如 此 高 的 熟 悉 度 。 此 外 , 在 实 际 项 目 开 发 中 , 一 个 数 据库 中 通 常 存 在 数 十 甚 至 数 百 张 表 , 这 些 表 之 间 有 着 错 综

34、复 杂 的 关 系 , 要 对 这些 表 准 确 地 进 行 多 表 查 询 绝 非 易 事 。 ( 2) 开 发 效 率 低 , 这 主 要 体 现 在 以 下 几 个 方 面 : 对 于 一 个 有 数 十 个 字 段 的 表 结 构 而 言 , 手 工 编 写 针 对 其 的 insert, 1update及 select语 句 是 一 个 非 常 繁 琐 的 过 程 。 对 于 已 经 编 写 完 成 的 SQL语 句 代 码 , 一 旦 表 结 构 发 生 变 化 , 需 要 相 应厦门大学本科毕业论文13地 修 改 着 这 些 代 码 。 如 果 查 询 语 句 涉 及 到 多 张

35、 表 的 话 , 需 要 精 心 地 构 建 相 应 的 多 表 查 询 语句 。 对 这 些 语 句 进 行 编 写 和 调 试 的 过 程 是 非 常 复 杂 和 困 难 的 。 得 到 查 询 结 果 ( 在 JDBC中 为 ResultSet) 后 , 需 要 手 工 将 其 包 装 到 相应 的 实 体 对 象 中 , 对 于 一 些 庞 大 的 表 结 构 而 言 , 这 又 是 一 项 繁 琐 的 工 作 。 正 是 基 于 以 上 这 些 弊 端 , 诞 生 了 ORM组 件 , ORM组 件 能 有 效 地 封 装 对 进行 ORM操 作 的 底 层 细 节 , 使 开 发

36、者 无 需 过 多 地 去 关 心 那 些 底 层 的 SQL语 句 ,从 而 专 注 于 实 际 业 务 的 开 发 。 具 体 而 言 , 使 用 ORM组 件 的 优 势 体 现 在 以 下 几 方 面 : insert, update及 select等 SQL语 句 , 将 由 ORM组 件 根 据 配 置 文 件 来 生成 并 封 装 成 相 应 的 方 法 , 开 发 者 只 需 调 用 那 些 方 法 即 可 。 由 于 底 层 语 句 已 被 封 装 成 了 相 应 的 方 法 , 即 使 表 结 构 发 生 变 化 , 也 无需 再 改 动 相 关 代 码 , 只 要 修 改

37、 一 下 配 置 文 件 即 可 。 多 表 查 询 工 作 将 由 组 件 自 动 完 成 并 封 装 到 相 应 的 类 中 , 开 发 者 只 需 通过 类 的 getters方 法 就 能 得 到 想 要 的 结 果 。 组 件 将 自 动 把 查 询 结 果 包 装 到 相 应 的 类 中 。 表2-1:几种数据持久化的解决方案优点 缺点SQL/JDBC 成熟,流行,使用DAO模式代码繁杂,可读性差,维护和移植困难JDO 简单,透明,标准 不够成熟Apache OJB 稳定性好,属于Apache基金组织文档资源少,支持标准太多成了负担(ODMG3.0,JDO1.0)iBATIS 可以

38、控制更多的数据库 持久层封装不够彻底,只厦门大学本科毕业论文14操作细节。适用于遗留系统的改造和对既有数据库的复用。是一个DBHelperHibernate 成熟,流行,功能强大,并逐渐发展成Java持久层事实上的标准透明度较低4.2HIBERNATE 简介在今日的企业环境中,把面向对象的软件和关系数据库一起使用可能是相当麻烦、浪费时间的。Hibernate是一个面试Java环境的对象/关系数据库映射工具。 Hibernate不仅仅管理Java类到数据库表的映射(包括Java数据类型到SQL数据类型的额映射) ,还提供数据查询和获取数据的方法,可以大幅度减少开发是人工使用SQL和JDBC处理数

39、据的时间。Hibernate的目标是对于开发者通常的数据持久化相关的编程任务,解放其中的95%。对于以数据为中心的程序来说,它们往往只在数据库中使用存储过程来实现商业逻辑,Hibernate可能不是最好的解决方案;对于那些在基于Java的中间层应用中,他们实现面向对象的业务模型和商业逻辑的应用,Hibernate是最有用的。不管怎样,Hibernate一定可以帮助你消除或者包装那些针对特定厂商的SQL代码,并且帮你把结果集从表格式的表示形式转换到一系列的对象去。4.2.1 持久化类(1)概念在应用程序中,用来实现业务问题实体的(如在电子商务应用程序中的Customer和Order)类就是持久化

40、类。不能认为所有的持久化类的实力都是持久的状态-一个实例的状态也可能是瞬时的或脱管的。厦门大学本科毕业论文15如果这些持久化类遵循一些简单的规则,Hibernate能够工作的更好,这些规则也被称作简单传统Java对象(POJO:Plain Old Java Object)编程模型。(2)规则所有的持久化类都必须有一个默认的构造方法(可以不是public的),这样的话Hibernate就可以使用Constructor.newInstance()来实例化它们。在Hibernate中,为了运行期代理的生成,构造方法至少是包(package)内可见的。持久化类有一个属性叫id。这个属性映射数据库表的主

41、键字段。这个属性可以叫任何名字,其类型可以是任何的原始类型、原始类型的包装类型、java.lang.String或者是java.util.Date。代理(proxies)是Hibernate的一个重要的功能,它依赖的条件是,持久化类或者是非final的,或者是实现了一个所有方法都声明为public的接口。可以用Hibernate持久化一个没有实现任何借口的final类,但不能使用代理来延迟关联加载,否则会限制进行性能优化的选择。在关系数据库schema和类的内部数据结构之间引入间接层会好一些。默认情况下Hibernate持久化JavaBeans风格的属性,认可get,is和set这种形式的方法

42、名。也可以对某些特定属性实行直接字段访问。属性不需要声明为public的,Hibernate可以持久化一个有default、protected或private的get/set方法对属性进行持久化。(3)动态模型运行期的持久化实体没有必要一定表示为像POJO类或JavaBean对象那样的形式。Hibernate也支持动态模拟(在运行期使用Map的Map)和像DOM4J的树模型那样的实体表示。使用这种方法可以只写映射文件而不需写持久化类。Hibernate默认工具在普通POJO模式。可以使用配置选项default_entity_mode,对特定的SessionFactory,设置一个默认的实体表示

43、模式。在映射文件中,首先要声明entity-name来代替一个类名(或作为一种附属)。在使用 dynamic-map 为 SessionFactory 设置了默认的实体模式之后,可以在运厦门大学本科毕业论文16行期间使用 Map 的 Map。动态映射的好处是,变化所需要的时间少了,因为原型不需要实现实体类,但无法进行编译期的类型检查,并可能由此会处理很多的运行期异常。Hibernate 映射时的数据库的 schema 能容易的规格化和合理化,并允许稍后在此之上添加合适的领域模型实现。4.2.2 集合类映射(1)持久化集合类Hibernate要求持久化集合值字段必须声明为接口,比如:public

44、 class Productprivate 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,Ha

45、shSet,TreeMap,TreeSet或者ArrayList。集合类实例具有值类型的通常行为。当被持久化对象引用后,他们会自动被持久化,当不再被引用后,自动被删除。假若实例被从一个持久化对象传递到另一个,它的元素可能从一个表转移到另一个表。两个实体不能共享同一个集合类实例的引用。因为底层关系数据库模型的原因,集合值属性无法支持空值语义;Hibernate对空的集合引用和空集合不加区别。(2)集合映射用于映射集合类的 Hibernate 映射元素取决于接口的类型。比如,元素用来映射 set 类型的属性。厦门大学本科毕业论文17除了,还有,和映射元素。具有代表性:name:集合属性的名称。ta

46、ble:这个集合表的名称。schema:表的schema名称,将覆盖在根元素中定义的schema。lazy:可以用来关闭延迟加载,指定一直使用预先抓取,或者打开“extra-lazy”抓取,此时大多数操作不会初始化集合类。inverse:标记这个集合作为双向关联关系中的方向一端。cascade:让操作级联到子实体。sort:指定集合的排序顺序,其可以为自然的或者给定一个用来比较的类。order-by:指定表的字段再加上asc或者desc,定义Map,Set和Bag的迭代顺序。where指定任意的SQL where条件,该条件将在重新 或者删除这个集合时使用。厦门大学本科毕业论文18fetch:

47、用于在外连接抓取、通过后续select抓取和通过后续subselect抓取之间选择。4.3 对象 /关系数据库映射对象和关系数据库之间的映射通常是用一个XML文档来定义的。这个映射文档被设计为易读的,并且可以手工修改。映射语言是以Java为中心,这意味着映射文档是按照持久化类的定义来创建的,而非表的定义。除了通过手写生成XML映射文档,也有一些工具可以用来生成映射文档,例如Xdoclet,Middlegen和AndroMDA。(1)hibernate-mapping这个元素包括一些可选的属性。Schema和catalog属性,指明了这个映射所连接(refer)的表所在的schema名称。假若制

48、定了这个属性,表明会加上所制定的schema和catalog的名字扩展为全限定名。假若没有指定,表名就不会使用全限定名。Default-cascade制定了未明确注明cascade属性的Java属性和集合类Hibernate会采取什么样的默认级联风格。auto-import属性默认让我们在查询语言中可以使用非全限定名的类名。schema:数据库schema的名称。catalog:数据库catalog的名称。default-cascade:默认的级联风格。default-access:Hibernate用来访问所有属性的策略。可以通过实现PropertyAccessor接口自定义。default

49、-lazy:制定了未明确注明lazy属性的Java属性和集合类,Hibernate会采取什么样的默认加载风格。厦门大学本科毕业论文19auto-import:指定我们是否可以在查询语言中使用非全限定的类名。package:指定一个包前缀,如果在映射文档中没有指定全限定的类名,就使用这个作为包名。(2)property元素为类定义了一个持久化的JavaBean风格的属性。name:属性的名字,以小写字母开头。column:对应的数据库字段名。也可以通过嵌套的元素指定。type:一个Hibernate类型的名字。update,insert:表明用于UPDATE和/或INSERT的SQL语句中是否包含这个被映射了的字段。这二者如果都设置为false则表明这是一个外源性的属性,它的值来源于映射到同一个或多个字段的某些其他属性,或者通过一个trigger或其他程序生成。formula:一个SQL表达式,定义了这个计算属性的值。计算属性没有和它对应的数据库字段。厦门大学本科毕业论文20access:Hibernate用来访问属性值的策略。lazy:指定实例变量第一次被访问时,这个属性是否延迟抓取。unique:使用DDL为该字段添加唯一的约束。同样,允许它作

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 学术论文 > 毕业论文

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报