返回介绍

前言

发布于 2025-04-21 21:42:10 字数 1983 浏览 0 评论 0 收藏

Hibernate 是为 Java 设计的轻量级对象/关系映射(object/relational mapping)服务。这是什么意思?这就是说,Hibernate 可以让你用普通的 Java 对象的形式来简洁而有效地处理关系数据库中的信息。不过,这样的说明仍然无法贴切地表达这项技术是多么有用和令人激动。持有这种观点的人并非只是我一个:Hibernate 2.1 赢得了《Software Development》杂志第 14 届“框架库和组件”震撼大奖(Jolt Award)。(本书是《Hibernate:A Developer's Notebook》的后续更新版本,我非常荣幸地编写了这本书。这本书第 1 版本介绍的是 Hibernate 2,它获得了第 15 届 Jolt 技术类图书生产力大奖(Productivity Winner)。

那么,Hibernate 到底神奇在哪里呢?所有非凡的应用程序(甚至许多平凡的应用程序)都需要存储和使用各种信息,也就都会涉及关系型数据库的使用。与 Java 对象世界不同,数据库通常要求使用者具备一定的技巧和专业知识。如何连通这两个世界曾经是一段时期内的一项重要任务,但这也是一件非常复杂而乏味的工作。

大多数人要事先写出一些非常繁琐的 SQL 语句,再将这些语句作为字符串嵌入到 Java 代码中,接着再使用 JDBC(Java database connectivity)执行查询语句和处理结果。JDBC 已经发展成为一个与数据库通信的、功能丰富且非常灵活的程序库,虽然现在基于这种方法还可以提供一些简化和改进的措施,但在 Java 中使用 JDBC 还相当繁琐。对于大量的数据处理,我们需要某种功能更强大的工具,将对数据库的查询从代码中分离出去,并以面向对象的方式将它们组件化,以简化对数据库的操作。

多年来,我自己开发的软件中就使用了这样的轻量级(甚至是超轻量级)对象/关系映射层功能组件。该组件最初起源于我的同事 Eric Knapp 为 Lands' End 电子商务网站开发的 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 和他的团队所做出的贡献,让我们的开发更加简单些吧。这本书就是要帮助你尽快地掌握这项技术。

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。