- 译者序
- 前言
- 本书怎么使用
- 本书排版字体约定
- 本书网站
- 致谢
- 第一部分 Hibernate 快速入门
- 第 1 章 安装和设置
- 第 2 章 映射简介
- 第 3 章 驾驭 Hibernate
- 第 4 章 集合与关联
- 第 5 章 更复杂的关联
- 第 6 章 自定义值类型
- 第 7 章 映射标注
- 第 8 章 条件查询
- 第 9 章 浅谈 HQL
- 第二部分 与其他工具的集成
- 第 10 章 将 Hibernate 连接到 MySQL
- 第 11 章 Hibernate 与 Eclipse:Hibernate Tools 使用实战
- 第 12 章 Maven 进阶
- 第 13 章 Spring 入门:Hibernate 与 Spring
- 第 14 章 画龙点睛:用 Stripes 集成 Spring 和 Hibernate
- 附录 A Hibernate 类型
- 附录 B Criteria API
- 附录 C Hibernate SQL 方言
- 附录 D Spring 事务支持
- 附录 E 参考资源
- 作者简介
- 封面介绍
配置 Hibernate
在我们继续学习 Hibernate 的使用之前,我们需要解决某些妨碍继续前进的问题。在上一章中,我们使用 src 目录下的 hibernate.properties 文件来配置 Hibernate 的 JDBC 连接。在这一章中,我们将使用 Hibernate XML 配置文件来配置 JDBC 连接、SQL 方言等各种 Hibernate 设置。与 hibernate.properties 文件一样,我们也把这个 XML 配置文件放在 src 目录中。将例 3-1 的内容输入到一个名为 hibernate.cfg.xml 的文件中,并将其保存在 src 目录下,再删除原来的 hibernate.properties 文件。
例 3-1:用 XML 配置 Hibernate:hibernate.cfg.xml
<?xml version="1.0"encoding="utf-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!--SQL dialect-->
<property name="dialect">org.hibernate.dialect.HSQLDialect</property>❶
<!--Database connection settings-->❷
<property name="connection.driver_class">org.hsqldb.jdbcDriver</property>
<property name="connection.url">jdbc:hsqldb:data/music</property>
<property name="connection.username">sa</property>
<property name="connection.password"></property>
<property name="connection.shutdown">true</property>
<!--JDBC connection pool(use the built-in one)-->
<property name="connection.pool_size">1</property>❸
<!--Enable Hibernate's automatic session context management-->
<property name="current_session_context_class">thread</property>
<!--Disable the second-level cache-->❹
<property
name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
<!--disable batching so HSQLDB will propagate errors correctly.-->
<property name="jdbc.batch_size">0</property>❺
<!--Echo all executed SQL to stdout-->
<property name="show_sql">true</property>❻
<!--List all the mapping documents we're using-->❼
<mapping resource="com/oreilly/hh/data/Track.hbm.xml"/>
</session-factory>
</hibernate-configuration>
从示例中可以看到,hibernate.cfg.xml 配置了 SQL 方言、JDBC 参数、连接池(connection pool)以及缓存提供者(cache provider)。这个 XML 文档还引用了我们在上一章写的映射文档,这样就不需要我们再从 Java 源代码中引用这些映射文档了。稍后将详细介绍这一配置文件的细节:
❶就像第 2 章的 hibernate.properties 文件一样,我们在这一行是为使用 HSQLDB 而定义它的 SQL 方言。你可能已经注意到 property 元素的 name 属性是 dialect,类似于.properties 文件中的属性的名称(也就是 hibernate.dialect)。当使用 XML 配置文件来配置 Hibernate 时,其实也是在向 Hibernate 传递了同样的属性。在 XML 配置文件中,可以省略属性名称的 hibernate.前缀。这一区段(dialect)和下一区段(connection)的配置方法与我们在第 2 章 hibernate.properties 文件中的配置是一样的。
❷用于配置 Hibernate 内部的 JDBC 连接的属性(connection.driver_class、connection.url、connection.username、connection.password 以及 connection.shutdown)与例 2-4 的 hibernate.properties 中的属性集也一一对应。
❸将 connection.pool_size 属性设置为 1。这意味着 Hibernate 将创建一个只保持一个连接的 JDBC Connection(连接)池。数据库连接池对于需要达到一定规模的大型应用程序来说很重要,不过就本书的目的来说,我们可以放心地将 Hibernate 配置为使用只有一个 JDBC 连接的内建连接池。在连接池实现上,Hibernate 支持很大的灵活性,可以非常容易地配置 Hibernate 来使用其他的连接池实现,例如 Apache Commons DBCP 和 C3P0。
❹照目前情况,当 Hibernate 执行实际的持久化操作时,它就会警告我们还没有配置它的二级缓存系统。对于像这样的简单应用程序来说,我们根本不需要二级缓存;所以这一行配置就是要关闭二级缓存,将每个操作立即发送到数据库。
❺这里,我们是在关闭 Hibernate 的 JDBC 批处理功能。虽然这样做会稍微降低一点效率(对于像 HSQLDB 这样的内存数据库的影响微乎其微),不过为了获取当前 HSQLDB 触发的错误报告,有必要这样做。当打开批处理模式时,如果批处理中有任何语句出了问题,从 HSQLDB 中得到的惟一异常将只是 BatchUpdateException,告诉你批处理失败。这样错误报告对调试程序几乎没有什么用。HSQLDB 的作者说这个问题将在下一个主要发行版本中得以修复;在此之前,当使用 HSQLDB 时,为了明白问题的来龙去脉,我们就先不使用批处理模式。
❻how_sql 属性是一个在开发和调试 Hibernate 程序时使用的属性。将 show_sql 设置为 true,就告诉 Hibernate 要它打印输出对数据库操作时执行的每条语句。如果你不希望在控制台看到打印输出的 SQL 语句,可以将这个属性设置为 false。
❼最后一部分列出了在我们的项目中使用的所有映射文档。注意,路径中包含的斜杠字符(“/”)是相对于 src 目录的。这一路径指明了.hbm.xml 文件作为资源在类路径上的位置。通过在这里列出这些文件,我们就不用在处理映射类的 build.xml 构建目标中显式说明如何找到它们(稍后可以看到),也不需要像本书的旧版那样在每个例子源代码的 main()方法中加载这些映射文档。把所有映射文档集中在一起是个不错的做法。
除了 src 目录下的 hibernate.cfg.xml 文件,还需要修改 build.xml 以引用这个新的 XML 配置文件。修改 codegen 和 schema 构建目标内的 configuration 元素,如例 3-2 中用粗体显示的几行所示。例 3-2:修改 build.xml,以使用新的 Hibernate XML 配置文件
……
<!--Generate the java code for all mapping files in our source tree-->
<target name="codegen"depends="prepare"
description="Generate Java source from the O/R mapping files">
<hibernatetool destdir="${source.root}">
<configuration configurationfile="${source.root}/hibernate.cfg.xml"/>
<hbm2java/>
</hibernatetool>
</target>
……
<!--Generate the schemas for all mapping files in our class tree-->
<target name="schema"depends="prepare"
description="Generate DB schema from the O/R mapping files">
<hibernatetool destdir="${source.root}">
<configuration configurationfile="${source.root}/hibernate.cfg.xml"/>
<hbm2ddl drop="yes"/>
</hibernatetool>
</target>
……
这两行告诉 Hibernate Tools Ant 构建任务,到哪里查找 Hibernate XML 配置文件,这样,Ant 任务就可以在这个配置文件中找到它们需要的所有信息(包括正在处理的映射文档;回想一下第 2 章的做法,我们不得不在 configuration 元素中显式构建了 Ant 的 fileset 元素,以匹配项目源代码树中的所有映射文件)。从现在起,本书的剩余部分将全部使用 Hibernate XML 配置文件,这样可以更方便地为 Hibernate 的相关工具传递各种需要的信息。
现在我们已经成功地配置好了 Hibernate,下面我们就回到本章的主要任务:生成持久化对象。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论