首页>参考读物>计算机科学与技术>综合

精通Hibernate
作者 : James Elliott, Ryan Fowler, Tim’Brien
译者 : 刘平利
出版日期 : 2009-05-18
ISBN : 7-111-26487-3
定价 : 55.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 330
开本 : 16开
原书名 : Harnessing Hibernate
原出版社:
属性分类: 店面
包含CD :
绝版 : 未绝版
图书简介

图书特色

图书前言

Hibernate是为Java设计的轻量级对象/关系映射(object/relational mapping)服务。这是什么意思?这就是说,Hibernate可以让你用普通的Java对象的形式来简洁而有效地处理关系数据库中的信息。不过,这样的说明仍然无法贴切地表达这项技术是多么有用和令人激动。持有这种观点的人并非只是我一个:Hibernate 2.1赢得了《Software Development》杂志第14届“框架库和组件”震撼大奖(Jolt Award)。(本书是《Hibernate: A Developer誷 Notebook》的后续更新版本,我非常荣幸地编写了这本书。这本书第1版本介绍的是Hibernate 2,它获得了第15届Jolt技术类图书生产力大奖(Productivity Winner)。
  那么,Hibernate到底神奇在哪里呢?所有非凡的应用程序(甚至许多平凡的应用程序)都需要存储和使用各种信息,也就都会涉及关系型数据库的使用。与Java对象世界不同,数据库通常要求使用者具备一定的技巧和专业知识。如何连通这两个世界曾经是一段时期内的一项重要任务,但这也是一件非常复杂而乏味的工作。
  大多数人要事先写出一些非常繁琐的SQL语句,再将这些语句作为字符串嵌入到Java代码中,接着再使用JDBC(Java database connectivity)执行查询语句和处理结果。JDBC已经发展成为一个与数据库通信的、功能丰富且非常灵活的程序库,虽然现在基于这种方法还可以提供一些简化和改进的措施,但在Java中使用JDBC还相当繁琐。对于大量的数据处理,我们需要某种功能更强大的工具,将对数据库的查询从代码中分离出去,并以面向对象的方式将它们组件化,以简化对数据库的操作。
  多年来,我自己开发的软件中就使用了这样的轻量级(甚至是超轻量级)对象/关系映射层功能组件。该组件最初起源于我的同事Eric Knapp为Lands誆nd电子商务网站开发的Java数据库连接和查询池缓存系统。这个系统引入了外部SQL模板的思想,可以通过名称来访问模板,并有效地与运行时数据组合起来,以生成实际的数据库查询。只是它后来才支持在模板中增加一些简单的映射指令,将这些模板直接绑定到Java对象。
  虽然它远不及像现在的Hibernate这样有强大的功能和系统,但这种方法在很多不同规模的项目和各种环境中已证实具有很大的价值。直到本书的第1版,我们一直都在使用这种方法,在为Cisco公司的CallManager平台建立IP电话应用程序时,我们最后采用了这种方法。不过,现在再做新项目时,我们会改用Hibernate。在学习完本书以后,你会明白为什么要做这样的选择,而且也可能会做出同样的决定。Hibernate会为你做很多事情,简单到让你几乎忘记是在处理数据库。需要什么对象,就直接拿来使用即可。这就是这种技术的优点和使用方式。
  你可能会问,Hibernate和Enterprise JavaBeans(EJB)有什么关系?它们是彼此竞争的技术吗?在什么情况下应该使用哪种?事实上,你可以同时使用这两种技术。但是并非每个应用程序都需要EJB的复杂性,多数应用程序只需要使用Hibernate直接与数据库交互,就足够了。另一方面,对于非常复杂的三层(three-tier)应用程序环境而言,EJB有时是不可或缺的。在这种情况下,EJB Session bean可以使用Hibernate来持久保存数据,或者也可以用于持久化BMP 实体 bean。
  事实上,EJB委员会深受Hibernate的影响,最终接受了Hibernate的“plain old Java objects”(POJO)的方式来进行持久化处理,这是一种功能强大、使用方便的持久化方式,并在EJB 3中引入了Java Persistence Architecture(JPA)(可以脱离EJB环境使用)。Hibernate 3其实也以一种完全可移植的方式实现了JPA(不过,在第7章中可以看到,你可能仍旧希望使用Hibernate的JPA扩展)。
  Hibernate的开发很明显已经成为Java和关系型数据库交互的分水岭事件。Java界应该感谢Hibernate之父Gavin King和他的团队所做出的贡献,让我们的开发更加简单些吧。这本书就是要帮助你尽快地掌握这项技术。
  本书怎么使用
  本书最初是O誖eilly的Developer誷 Notebook系列的一部分,可帮助读者快速掌握有用的最新技术。虽然本书扩展了很多Hibernate用户可能想要了解的技术,但本书不打算成为Hibernate的完整参考手册。本书反映了作者对该系统研究的成果,从最初的下载,到项目的配置,通过一系列项目演示了如何完成各种实践目标。
  阅读示例并实践一下,你不但能够快速地搭建好Hibernate环境,并且可以立即将它用于实际项目的开发。这就好像你“跟着我”走过我绘制的一片领地,沿途中,我会指出有用的路标和危险的陷阱。
  虽然我一定会介绍一些背景知识,解释Hibernate的工作原理和原因,但这总是针对某项任务。有时,我会建议你参阅一些参考文档或其他在线资源,以便深入了解一些底层的概念或其他Hibernate使用方式的相关细节。
  在读过前面几章之后,就不需要按照章节顺序依次阅读了,可以直接跳转到你特别感兴趣或关注的主题。你可以自己构建示例代码,也可以从本书的网站下载完整的源代码(可以在前一章示例代码的基础上,按照当前章节的说明,自己动手修改代码,来实现正在阅读的代码示例)。如果你正在学习的示例和前面的示例有关,同时你也有兴趣了解,则可以随时跳转到先前的示例。
  本书排版字体约定
  本书的字体有特定的约定,提前了解这些约定将有助于你对本书的理解。
  斜体(Italic)
  用于文件名、文件扩展名、URL、应用程序名称、强调以及第一次引入的新术语。
  等宽字(Constant width)
  用于Java类的名称、方法、变量、属性、数据类型、数据库元素以及以文本方式出现的代码片段。
  等宽黑体字(Constant width bold)
  用于在命令行输入的命令,以及突出演示在运行示例中插入的新代码。
  等宽斜体字(Constant width italic)
  用于说明输出结果。
  本书网站
  本书的网站地址是:http://www.oreilly.com/catalog/9780596517724/,提供了一些你想要了解的重要信息。本书所有示例按章节组织,都可以在以上网站中找到。
  这些示例文件已经压缩成ZIP和TAR文件。
  多数情况下,各章节都会用到一些相同的文件,随着示例功能的不同,这些文件不断增加一些新代码。下载文档中每一章的目录都是相应示例系统的状态快照(snapshot),反映了该章的所有变动和新增内容。
  如何联系我们
  请将有关本书的评论和问题寄送给出版商:
  美国:
  O’Reilly Media, Inc.
  1005 Gravenstein Highway North
  Sebastopol, CA 95472
  中国:
  北京市西城区西直门南大街2号成铭大厦C座807室(100035)
  奥莱利技术咨询(北京)有限公司
  O誖eilly的每一本书都有专属网站,你可以在那找到关于本书的相关信息,包括勘误表、示例代码以及其他的信息。本书的网站地址是:
  http://www.oreilly.com/catalog/9780596517724/
  询问技术问题或对本书进行评论,请发电子邮件到:
  bookquestions@oreilly.com
  欲获取有关我们的图书、会议、资源中心(Resource Center)以及O誖eilly Network的更多信息,可以访问我们的网站:
  http://www.oreilly.com
  http://www.oreilly.com.cn
  致谢
  首先非常感谢Gavin King、Christian Bauer、Steve Ebersole、Max Andersen以及其他参与创建和改进Hibernate的人。Hibernate这个工具让Java开发人员的工作变得如此简单,我们对它投入了巨大的热情,这也就是为什么在Jim编写了第1版本之后,我们三位作者还要决定继续扩展和更新这本书的原因。希望它确实如此!
  我们要特别感谢我们的技术审阅者Michael Podrazik、Stefan Winz、Henri Yandell,感谢他们耐心地提出细致的、有帮助的建议。有了他们的贡献,这本书才会变得更好。
  我们也要感谢O誖eilly生产部的Keith Fahlgren、Adam Witwer以及其他成员,他们帮助我们尽快掌握了新的DocBook XML编辑环境,也让这本书看起来更加漂亮。
  Stripes示例包括了Tim Fennell开发的代码,请在Apache Software License(apache软件许可)下使用。Stripes使用许可协议位于下载代码的ch14/stripes_license.txt中。
  James Elliott
  不管怎么样,都要先感谢我的父母,虽然我们原来住在乡下,他们还是排除万难,培养我对计算机领域的兴趣。也要感谢我的搭档Joe,他忍受着已经深深着魔的我。此外,也要感谢我的老板Berbee,给我深入研究Java的机会,并积累起作为一个可复用API设计的架构师所需要技巧;并且,让我不必担心程序设计世界中难以理清的专利权以及平台特定问题的琐碎事务;给了我那么多了不起的同事;还有,当我因为编写这本书而需要利用这些经验时,他给了我很大的支持。
  当我需要在第2版中扩展一些相关的技术,例如Spring和Stripes时,Ryan和Tim给了我帮助。他们的热情和专业知识是让这个拖延很久的版本得以进展的主要因素。
  Marc Loy邀请我协助《Java Swing》第2版的工作,让我和O誖eilly那些优秀的家伙取得联系,Mike Loukides从那时起和我共事也很有耐心,甚至鼓励我自己写一本书。他发现Hibernate就是我起步的最佳主题,后来的事实也证明这是非常正确的决定,所以我再次扩展这本书。《Java Swing》那本书的校对编辑Deb Cameron扮演着极为关键的角色,让我把犹豫不决的写作冲动化为受益良多的实际行动。我也感谢她愿意把我“借出去”,不用再协助《Learning Emacs》第3版的工作,这让我可以专注于Hibernate的写作计划。
  我还要感谢本书第1版的两位技术审阅者:Adrian Kellor和Curt Pederson。他们看过很早期的草稿,帮助我确定了创作的基调和方向,而且还强化了我对这项写作计划的价值的热情。当本书的第1版成型时,Bruce Tate通过实际使用和开课讲授Hibernate,对本书做了很重要的检查,提出了相当不错的建议和鼓励。Eric Knapp以科技类大学教科书的角度审查了本书大部分的内容,并提醒我应该脚踏实地。Tim Cartwright在最后阶段加入,看到的基本是最后完整的草稿,他认为Hibernate是一个在未来极具潜力的平台,并对内容和表述方式提供了大量和相当有用的回馈。
  Ryan Fowler
  我要感谢Jim邀请我合作编写这本书,也感谢他在我的创作和日常工作中对我的指导。我也要感谢Tim提供的技术帮助和对我的宽慰。感谢Mike Loukides耐心地为我指点创作的方向。
  我也得感谢我的妻子Sarah,感谢她对我的帮助、耐心和爱。没有她的支持,事情一定会变得很糟糕。最后我还要感谢我的父母,是他们给了我成就现在的事业和发展的工具。
  Timothy O’Rrien
  感谢Jim和Ryan邀请我编写本书有关Spring 和 Maven的章节。感谢Mike Loukides提供了创作和合作的良好环境。Keith Fahlgren为写作提供的支持,他简直就是无价的资源宝库。O誖eilly的出版技术团队也为我们解决各种DocBook标记内容和版本控制问题,并花费了他们很多宝贵时间。
  感谢Stefan Winz、Robert Sorkin、Ahmed Abu-Zayedeh、Bob Hartlaub、Rock Podrazik以及Jeff Leeman,他们为Spring 和 Maven相关章节的代码示例提供了必要的基础资料和无私的测试。也感谢我的女儿Josephine Ann,她为Hibernate标注相关的章节提供了重要的反馈信息;Josephine虽然只有两岁多,但是她很快地就学了一些Hibernate;感谢她抽出观看《Blue誷 Clues》(译注1)的时间,帮我发现了我的pom.xml文件中一些幼稚的错误。最后要感谢我的妻子Susan,她非常优秀。

作者简介

James Elliott, Ryan Fowler, Tim’Brien:暂无简介

译者简介

刘平利:暂无简介

译者序

译者序
基本上所有应用程序都要与数据打交道,如何操纵和处理底层数据库曾经是一个让人非常头痛的问题,尤其对于Java新手来说,更是无从下手。
如果直接使用最底层的JDBC来访问数据库,再在代码中夹杂上无数的SQL语句,以这样的方式来手工编写代码不仅单调乏味、易于出错,而且会占用整个应用程序的很大一部分开发工作量。关键是这样得到的最终产品往往与底层的数据库紧密地耦合在一起,如果要更换数据库,必须花费大量的人力资源。
优秀的面向对象开发人员厌倦了这种重复性劳动,他们开始采用通常的“积极”偷懒做法,即创建工具,使整个过程自动化。对于关系数据库来说,这种努力的最大成果就是对象/关系映射(ORM)工具,而Hibernate则是这些工具中的典型代表。
Hibernate是一个免费的开源Java包,它使得与关系数据库打交道变得十分轻松,就像数据库中包含的是普通Java对象一样,不必考虑如何把它们从神秘的数据库表中取出(或放回数据库表中)。Hibernate解放了广大Java程序开发人员,使他们可以专注于应用程序的对象和功能,而不必担心如何保存它们或稍后如何找到它们。
Hibernate之所以能够流行,应该归功于以下优点:
1)Hibernate是JDBC的轻量级对象封装,它是一个独立的对象持久层框架,与App Server、EJB没有什么必然的联系。Hibernate可以用在任何JDBC可以使用的场合。
2)Hibernate是一个和JDBC密切关联的框架,所以Hibernate的兼容性与JDBC驱动、数据库都有一定的关系,但是与使用它的Java程序、底层数据库没有任何关系,也不存在兼容性问题。
3)Eclipse等主流Java集成开发环境对Hibernate有很好的支持,在大型项目,特别是持久层关系映射很复杂的情况下,Hibernate效率非常高。
为了让以前对Hibernate了解不多的Java爱好者快速掌握Hibernate的基本配置、使用方法、经验技巧,以及它与其他常用开发工具的协同配合,本书的作者由一个简单而现实的示例入手,从数据表的创建,讲到各种基于数据库的操作,甚至还创建了一个简洁的Web网站,内容涉及Hibernate的方方面面。讲解非常细致,不仅包括了足以帮助读者理解的源代码,而且对于每一操作步骤,作者都给出了详细的操作命令。相信读者在阅读和实践本书示例的过程中一定不会遇到太大的问题,而且能够以最短的时间来掌握Hibernate,这应该就是本书最可贵的价值所在了。
本书在结构上分为两大部分。前一部分主要介绍Hibernate框架自身的功能,后一部分则介绍Hibernate与其他IDE和开发工具的配合使用。所有讲解并非照本宣科式地照搬API文档和参考手册,而是时时处处渗透着作者在使用Hibernate过程中所领悟到的经验和体会,尤其是在讲解Hibernate的关联映射配置时,虽然我自诩已经使用Hibernate很多年了,但还是学到不少知识点,这些在API和参考手册中没有遇到和使用过。第二部分中介绍的各种开发工具也是成熟的Java开发人员不可或缺的利器,对它们的掌握和理解,是超越普通程序员的必经之路。
在翻译过程中,虽然我力求在忠于原文的基础上,尽可能从专业Java开发人员的角度来做到信、达、雅,但由于自身水平有限,必定会有诸多不足,希望各位读者不吝指教。
感谢机械工业出版社华章分社陈冀康编辑的理解和支持;也感谢我的朋友孙凤萍、董彦奇、聂磊、高原等对本书翻译和校对工作的大力帮助。另外还要感谢我的家人,没有他们的支持也无法完成这本书的翻译。
最后,祝大家能够在阅读中享受技术进步带来的乐趣!
刘平利
2008年12月1日

图书目录

目录
前言 1
第一部分  Hibernate快速入门
第 1 章  安装和设置 9
获得Ant发布版本 9
检查Java版本 11
获得Maven Tasks for Ant 12
安装Maven Tasks for Ant 13
使用HSQLDB 数据库引擎 14
获得Hibernate Core 15
建立项目层次结构 17
第 2 章  映射简介 28
编写映射文档 29
生成Java类 32
编制数据库Schema 37
第 3 章  驾驭Hibernate 44
配置Hibernate 44
创建持久化对象 47
检索持久化对象 55
建立查询的更好方法 59
第 4 章  集合与关联 62
集合的映射 62
集合的持久化 71
集合的检索 76
使用双向关联 79
使用简单集合 83
第 5 章  更复杂的关联 85
关联的主动加载和延迟加载 85
有序集合 88
扩充集合中的关联 89
关联的生命周期 101
自身关联 104
第 6 章  自定义值类型 106
用户自定义类型 106
定义一个持久化的枚举类型 107
使用自定义的类型映射 109
使用持久化的枚举对象 115
建立组合自定义类型 121
第 7 章  映射标注 134
Hibernate标注 134
为模型对象添加标注 138
另一种方法 152
第 8 章  条件查询 155
使用简单条件查询 156
组合式条件查询 159
投影和聚合的条件查询 161
在关联中应用条件查询 165
示例查询 167
面向属性的Criteria工厂 169
第 9 章  浅谈HQL 171
编写HQL查询 171
选择属性和其他部件 176
排序 179
使用聚合值 180
编写原生 SQL 查询 184
第二部分 与其他工具的集成
第10章  将Hibernate连接到MySQL 189
建立MySQL数据库 189
连接到MySQL 190
尝试一下 191
查询数据 195
第11章  Hibernate与Eclipse:Hibernate Tools
使用实战 198
在Eclipse中安装Hibernate Tools 198
创建一个Hibernate控制台配置 205
更多的编辑支持 209
Hibernate Console视图 211
代码生成 217
映射图表 221
第12章  Maven进阶 223
什么是Maven 223
安装Maven 226
项目的构建、测试以及运行 226
使用Maven生成IDE项目文件 229
用Maven生成报告 231
Maven项目对象模型 234
Maven构建的生命周期 243
使用Maven Hibernate3插件 245
超越Maven 250
第13章  Spring入门:Hibernate与Spring 251
Spring是什么 251
编写数据访问对象 253
创建应用程序上下文对象 262
把所有组件装配在一起 266
第14章  画龙点睛:用Stripes集成Spring和Hibernate 277
安装Stripes 278
准备Tomcat 279
创建Web应用程序 279
增加Stripes 283
处理关联 296
附录A  Hibernate类型 304
附录B  Criteria API 311
附录C  Hibernate SQL方言 319
附录D  Spring事务支持 321
附录E  参考资源 325

教学资源推荐
作者: 刘凤岐 编著
作者: (美) Patrick Juola 著
作者: 雷震甲 编著
参考读物推荐
作者: 兰天 曲鹏东 孙高飞 姜建卫 著
作者: 田原 著
作者: (美)Andrew Stellman; Jennifer Greene 著