在非管理的环境中,例如一个Servlet容器,应用程序负责来取得数据库的连接,而Hibernate作为程序的一部分,理所当然的负责这部分的功能。由你来告诉Hibernate来获得这些连接,当然每次都创建新的数据库连接并不是一个明智的选择,你需要有一个数据库连接池来维护一定数目的连接,使用连接池的理由如下:
- 创建数据库连接的代价很高
- 维护数据库的连接很消耗性能
- 对于一些数据库驱动来说,创建preparedstatement也是很消耗性能的
图2.2展示了数据库连接池在web应用环境中的角色。由于这是一个非管理的环境,所以并没有实现数据库连接池,你通常需要自己实现一个连接池或者依靠第三方的连接池,通常在没有Hiernate的情况下,应用程序需要自己去从连接池取得数据库连接。
如果存在Hibernate的情况下,图的情况会发生一些变化,Hibernate来扮演数据库连接池客户端的角色,应用程序使用Session和Query的API来完成持久化操作,需要做的是仅仅维护事务而已。
使用数据库连接池
Hibernate定义了插件的体系结构支持连接池的插拔。其默认使用的是C3P0。Hibernate会使用指定的配置来完成连接池的配置。在列表2.4你将看到这些配置。
图2.2 非管理环境中的数据库连接池
图2.3 带有Hibernate的非管理环境中的数据库连接池
列表2.4
以上的代码行描述了一些信息,让我们从第一行开始看起:
- 数据库驱动的类名字
- 数据库连接名字
- 数据库用户名
- 数据库密码
- 数据库方言
- 数据库连接池保持最少的连接数
- 数据库连接池保持最多的连接数
- 超时时间,超过这个时间,空闲的连接将从连接池都移除
- preparedStatement缓存的最大数目
- 在连接验证前,数据库空闲的秒数
设置哪些hibernate.c3p0的属性说明使用的数据库连接池是C3P0,相比以上的这些属性,C3P0有更多的特性,如果你想了解更多,请参照Hibernate API文档。
启动Hibernate
利用这些属性,我们来如何启动hibernate呢,这些属性被放在hibernate.properties文件中,你要做的就是将文件放在classpath上面。当你初次创建Configuration对象的时候,它会自动的检测到这些配置。
我们现在总结一下刚才所学到的配置步骤:
- 将数据库驱动Jar和hibernate2.jar放在你的classpath上面
- 将Hibernate的那些部署文件放在你的类路径上
- 选择你要使用的数据库连接池,不要忘记指定方言
- 让Configuration知道你的这些属性放在hibernate.properties文件中
- 创建你的Configuration,SessionFactory,Session
不幸的是,你现在还没有任何映射文件,如果你迫不及待的想看到运行结果,你可以运行之前的Hello World,如果你想了解管理环境中是如何配置的,那么你就应该继续阅读下去。