本书由互联网上影响广泛的开放文档OpenDoc系列自由文献首份文档“Hibernate开发指南”发展而来。在编写过程中,进行了重新构思与组织,同时对内容的深度与广度进行了重点强化。本书从持久层入手,引出对象/关系数据库映射的由来,接下来聚焦于目前最完善、最强悍的ORM产品——Hibernate。从一个基础程序入手,讲述Hibernate的基本语法与配置,慢慢升高到缓存、延迟加载等高级特性。本书内容深入浅出,先讲述持久层设计与ORM,再由Hibernate概述、Hibernate基础Hibernate高级特性顺序展开,直至Hibernate实战,重点讲述了Hibernate的基础语法、基础配置、O/R映射、数据关联、数据检索、HQL实用技术、自定义持久化实现、Hibernate回调与拦截、Hibernate分页等实用技术,Hibernate实战部分则用一个真实论坛的创建演示了Hibernate的强大功能。本书有丰富的附录部,在附录中讲述了Hibernate常用的映射配置,Hibernate工具、XDoclet模板配置以及Hibernate的益友iBatis用法,还以卡片的形式列出了本书中所用的工具及软件,附录最后一部分是“快速启动代码”,供读者对比与参考,也给初学者提供了一个快带起步的基础。\r\n 本书适合于Hibernate的各个阶层的读者。
第1部分 持久层\r\n 第1章 面向应用的持久层设计 \r\n 1.1 持久层概述 \r\n 1.2 持久层设计 \r\n 1.3 持久层设计与ORM \r\n 1.4 持久层框架概述 \r\n第2部分 Hibernate\r\n 第2章 Hibernate概述 \r\n 第3章 快速起步 \r\n 3.1 准备工作 \r\n 3.2 Hibernate配置 \r\n 3.3 日志配置 \r\n 3.4 第一段代码 \r\n 3.5 代码初解 \r\n 第4章 Hibernate基础 \r\n 4.1 Hibernate基础语义 \r\n 4.2 基础配置 \r\n 4.3 Hibernate O/R映射 \r\n 4.4 数据关联 \r\n 4.5 Hibernate数据检索 \r\n 4.6 HQL实用技术 \r\n 4.7 自定义持久化实现 \r\n 第5章 Hibernate高级特性 \r\n 5.1 Hibernate持久化实现 \r\n 5.2 Hibernate回调与拦截机制 \r\n 5.3 Hibernate实用技术 \r\n 第6章 Hibernate 实战——创建RedSaga论坛 \r\n 6.1 目标 \r\n 6.2 E-R建模还是对象建模 \r\n 6.3 E-R建模及工具集\r\n 6.4 对象建模 \r\n 6.5 项目的目录组织和基础设施 \r\n 6.6 测试优先 \r\n 6.7 容器,session与事务 \r\n 6.8 HibernateException,Checked \r\n 6.9 Template/Callback 简化业务方法 \r\n 6.10 版面:一棵自身循环的树 \r\n 6.11 版面与帖子:Master/Detail 主从关系 \r\n 6.12 帖子树及其分页 \r\n 6.13 与Web层交互 \r\n 6.14 帖子的多形扩展:投票 \r\n 6.15 移植到Hibernate 3\r\n 6.16 结束语\r\n第3部分 附 录\r\n 第7章 常用Hibernate映射配置说明 \r\n 7.1 hibernate-mapping节点 \r\n 7.2 class节点定义 \r\n 7.3 id节点定义 \r\n 7.4 属性/字段映射配置 \r\n 第8章 Hibernate工具 \r\n 8.1 准备工作 \r\n 8.2 根据数据库定义生成映射文件——MiddleGen \r\n 8.3 Hibernate官方工具 \r\n 8.4 XDoclet-同步Hibernate基础代码 \r\n 8.5 工具的使用周期 \r\n 第9章 Hibernate XDoclet模板配置 \r\n 9.1 IDEA \r\n 9.2 Eclipse \r\n 第10章 Hibernate益友——iBatis \r\n 10.1 Ibatis 概述 \r\n 10.2 快速起步 \r\n 10.3 IBatis 基础 \r\n 10.4 iBatis高级特性 \r\n 10.5 IBatis周边 \r\n 第11章 工具卡片和软件 \r\n 11.1 工具卡片 \r\n 11.2 Eclipse安装和基本使用方法 \r\n 11.3 快速启动代码 \r\n参考资料
Hibernate… Hibernate?
两年前,笔者在为公司产品进行技术框架选型时,无意间在SourceForge项目列表中看到“Hibernate”这个陌生的名字。带着一丝迷惘与好奇,下载了这个小小的组件包,正是从这次信手点击开始,Hibernate已伴随着笔者征战了两个寒暑。如今,伴随着公司产品线的推广,Hibernate.作为产品的持久层支撑平台,已经在新加坡花旗银行、中国工商银行、中国银行的后台系统中默默地奉献了近一个春秋。
对于开源项目而言,可以相信,纵使极致华美的赞誉,也无法与一线工程师的信任与依赖相比肩。
2003年,Hibernate逐渐在国内流行,出于对Hibernate项目的信任与期待,笔者逐渐将自己在工作中的心得整理成文,于是产生了OpenDoc系列自由文献的首份文档——《Hibernate开发指南》,力图以此为Hibernate的推广尽一份绵薄之力。
本书也正是由《Hibernate开发指南》扩展而来的。《Hibernate开发指南》是自由发布的非正式文献,未免在结构和行文上比较随意散漫。本书编写过程中,根据OpenDoc读者的反馈,进行了重新构思和组织,同时对内容的广度和深度也进行了重点强化。较之《Hibernate开发指南》,本书内容扩充了6倍有余,涵盖至目前Hibernate最新版本3.0版的功能特性。
技术写作是一个漫长而艰苦的过程,值得庆幸的是,并非我一人独自承受这份通宵达旦的艰辛。好友晓钢和唐勇的加入使得这份工作平添了许多愉快和惬意。
晓钢是Hibernate官方文档中文版翻译的领导者,拥有国内独家Hibernate CVS账号,可算是Hibernate本地推广的先行者。
唐勇作为国内惟一Hibernate Eclipse插件(Tanghan Plugin)的作者,对Hibernate的开发与使用也积累了相当深厚的理论基础和实际经验。
有这两位挚友的加入,使得整个创作过程行云流水且充满乐趣。每每夜半,网络语音会议上,大家畅所欲言,从技术写作到娱乐八卦,无所不谈,那段时光充实而快乐,诚然是一段美好的回忆。
在本书即将与读者见面前夕,动手写这样一篇序言,心中充满期待与不安,读者的支持与反馈将是对我们最大的激励,希望本书能带给大家实质上的帮助。
夏 昕
2005年4月10日 夜
上 海
本书是我们三位作者通力合作的结果,夏昕不管在技术上还是现实生活中都体现出玉树临风的风范;唐勇是一位力战型选手,他把在工作中总结的宝贵经验传播到四面八方。作为一次开源项目的推广行动,一种特殊的自豪感也一直贯穿我们的写作过程。衷心希望读者能从本书中获得助益,进而加入到开放源代码的大军中来。
曹晓钢
2005年4月10日
本书源于夏昕关于Hibernate的OpenDoc(开源文档),这个文档在Java社区中流传很广,基本成为了学习Hibernate的基础教程。第一次看到这个文档,比较诧异,国内的技术人员还可以把技术入门文档写得这样深入浅出,不论文笔的流畅,还是内容的深度都很够“味道”。于是开始和夏昕联系,希望能以这个文档为基础写一本以Hibernate为主题的专题技术书籍。
Hibernate作为Java ORM的优秀开源实现,已经成为Java ORM的一种标准,为饱受JDBC折磨的开发者带来了“福音”。本书也希望能为那些想要应用和深入了解Hibernate的开发人员带来“福音”。
唐 勇
2005年4月10日
上 海
夏昕,金融行业技术顾问。OpenDoc项目发起人,《Dr Bobb’s Journal China》常任编委。Bor land 2003技术专家。醉心于开源项目的研究与推广,希望能为国内的技术普及尽一份绵薄之力。主要研究领域:敏捷过程、设计模式、业务建模。译著:《零缺陷编程》、《UML业务建模》。
曹晓钢,从小热爱计算机屏幕上蹦出的一个字符,感受到其中的无穷乐趣,遂勤学不缀,尤喜对数据结构与算法的学习,项目实战经验丰富。
RedSaga网站创立人,Hibernate官方文档本地化领导者,译著《深入Java虚拟机(第二版)》。愿为中国开放源代码事业的春天早日到来而奋斗。
负责本书“实战篇”的编写工作。
唐勇,2000年至2003年底一直从事企业信息系统的研究与管理。主要研究方向:J2EE系统架构、软件研发管理以及相关咨询培训。
现为上海漫索科技有限公司软件开发部经理,致力于Future企业研发管理系统的设计、开发和管理工作。《Tanghan Eclipse Plugin for Hibernate》的作者。
计算机是人类又一伟大的发明。它的“记忆力”比人类更好,在完成精确任务方面比人类更稳定,可以惊人的速度毫不疲倦地完成大量工作,把人类从繁重的记忆与计算工作中解脱出来,其意义甚至超过了蒸汽机的发明。
软件凝聚了人类的无数聪明才智,就如同提线木偶身上纷繁复杂的提线一样,有条不紊地控制硬件运作。若是揭开软件表面的盖子一窥究竟,则犹如俯瞰巨大城市中的交通道路,数据如汽车般在“电子公路”上穿梭,运作良好的公路上井井有条,每一个数据都是鲜活的个体,它们有自己的生命周期,会不断繁衍消亡。
计算机应用系统犹如繁华都市,操作系统是城市的基础设施,数据库则是小区与道路的管理部门。拜数据库管理系统所赐,我们不再需要如同操纵提线木偶一般小心翼翼,只需要把数据扔到数据库接口中,在需要的时候,总是能够再次取出。有了数据库系统,我们的工作就从照顾单个数据,上升到分析城市人口容量,规划道路,以防止人口膨胀与交通堵塞的高度上来。数据库解放了我们跟踪数据的生产力。
作为程序员,每当我想到这些妙不可言之处,总是禁不住微笑起来。为了达到这样一个模拟城市的游戏般的目标,我们努力操纵着数据库。不幸的是,数据库的操纵本身,却并非那么好玩。
关系数据库的操作基于行集。因此,对于关系数据库接口的操纵,长期以来也都是基于行集的,ODBC, BDE (Borland Database Engine), ADO, ADO.NET,JDBC的各个版本,虽然增加了很多特性,但从功能上来却看毫无二致,应用程序承担着从行集中获取数据来展示的繁重工作。假若客户输入了查询条件,把查询条件翻译为数据库查询语言的工作,也是枯燥无味的。这些不断推出的数据存取方法,给开发人员带来的是有限的特性扩展,却让程序员如同推石头上山的西西弗斯一样,不断重复着学习的过程,也不禁开始嘀咕:为何那些大公司每隔几年就要重新“发明”一次数据库存取技术?
量变总会引起质变。
在另一条道路上,面向对象技术悄悄掩杀过来。那条道路是软件开发本身的科学,关注如何有效合理地组织代码,减少程序员的编码痛苦,用符合事物本原与适应人类自身思维方式的方法来组织程序。虽然面向对象技术发展的时间不算短,但高级面向对象技术的迅速普及,确实是发生在“设计模式”这一里程碑的总结出现之后。以往对面向对象技术的威力表示怀疑的人们,用学习了设计模式的眼光,再次审视自己的程序代码时,仿佛具有了哲人的眼睛,对程序设计的思想洞彻心扉。
风暴之后,大家已经学会从更高的层次来进行程序开发,在这个时候,JDBC这样面向行集的数据存取技术显已得是那样地呆板迟缓,从未这样碍眼过。人们意识到我们所缺乏的,是用符合事物本原的方式来访问数据。数据是灵活的,富有生命的,而如前所述数据库是小区管理部门与道路建设部门,是安置数据对象个体的居所。当数据活跃起来的时候,就让它阳光下充分表现自己的活力,动作舒展;当数据沉睡的时候,则为它遮风挡雨。
这是一个多么美妙而和谐的境界啊!当面向对象与数据管理结合起来时,人们知道,一场新的革命来临了,这就是Object /Relation Mapping ——对象/关系数据库映射。
在本书的第1章,我们就会来讲述对象/关系数据库映射的由来,持久层设计对应用程序开发的作用与地位。
后续的章节,聚焦于目前最完善和强悍的ORM产品——Hibernate。从一个基础的简单程序入手,我们讲述Hibernate的基本语法与配置,慢慢升高到缓存、延迟加载等高级特性,正是它们把JDBC与Hibernate的距离拉得更远了。
随后,我们会结合一个实例,讲述在实际项目开发中,如何使用Hibernate。这已经超越了Hibernate的语法,其中涉及的话题很广泛,从项目的组织,测试优先的原则,到Hibernate的优缺点,用实际的事例展示Hibernate的拦截器、父子映射等实现,让我们再次接受暴风雨般的洗礼吧!
最后,我们还提供了丰富的附录内容,其中包括对Hibernate的有益补充:iBatis的介绍,iBatis是一个独立的项目,可以视作是半自动化的城市管理者,让你可以自己插手来修建道路,或许你会感觉到别样的乐趣。
下面这个mindmap,展现了Hibernate相关的技术构成,一图胜千言,读者可以首先从此图中了解Hibernate的全局轮廓,之后,我们就将启程,踏上Hibernate探索之旅。