Hibernate数据库连接的设置及其配置文件的书写

Hibernate数据库连接的设置及其配置文件的书写

首先Hibernate的配置有两种情况1.管理环境中的配置。2.非管理环境中的配置。我们可以理解管理环境为它提供了自动的事务,资源管理和底层的安全结构。比如JBoss,BEAWebLogin或IBMWebsphere都实现了标准的管理环境。而非管理环境与之相反没有提供自动的事务,资源管理和底层的安全结构。比如Jetty或Tomcat这样的servlet容器。

其次我们来看具体的数据库连接

在非管理环境中,我们的hibernate要去获得JDBC连接,如果我们为每个数据库的交互都去创建一个连接就比较浪费资源了,所以我们应该使用数据库连接池。而非管理环境又没有实现连接池,我们必须实现自己的池化算法或者依赖于第三方类库例如C3P0,因为Hibernate内置了对C3P0的支持,所以我们使用该连接池。不使用Hibernate时,应用代码通常直接调用连接池来获得JDBC连接并执行SQL语句。

在管理环境中,比如,J2EE应用服务器就是典型的管理环境。虽然应用服务器通常是为了支持EJB而设计的,但即使你不使用EJB实体Bean,你仍然可以利用它提供的其它服务。Hibernate经常与会话或消息驱动EJB一起使用,EJB调用相同的HibernateAPI:Session(会话)、Transaction(事务)和Query(查询)。与Hibernate相关的代码在非管理与管理环境之间是完全可移植的,Hibernate透明地处理了不同的连接与事务策略。应用服务器将连接池对外显示为JNDI绑定数据源。它是javax.jdbc.Datasource类的一个实例。你需要提供一个JNDI全限定名来告诉Hibernate,到哪里去查找JNDI数据源。

比如:
hibernate.connection.datasource = java:/comp/env/jdbc/AuctionDB
hibernate.transaction.factory_class = \
net.sf.hibernate.transaction.JTATransactionFactory
hibernate.transaction.manager_lookup_class = \
net.sf.hibernate.transaction.JBossTransactionManagerLookup
hibernate.dialect = net.sf.hibernate.dialect.PostgreSQLDialect

但是我们要知道:引自《HibernateinAction》

引用
Java早就有了一个标准的事务API:JTA,它用来在J2EE管理环境中控制事务。这被称作容器管理的事务(CMT)。如果存在JTA事务管理器,JDBC连接将被它支持并完全位于它的控制之下。这与非管理环境不同,在非管理环境中应用(或连接池)直接管理JDBC连接和JDBC事务。

因为Hibernate需要在这两种环境之间保证可移植性,因此它定义了一组控制事务的API。Hibernate的事务接口抽象了下层的JTA或JDBC事务(或者,甚至潜在的CORBA事务)这个下层的事务策略可以使用属性。

hibernate.connection.factory_class来设置,它可以取下列两值之一:

引用
■ net.sf.hibernate.transaction.JDBCTransactionFactory代表了直接的JDBC事务。

这种策略应该与非管理环境中的连接池一起使用,并且如果没有指定任何策略时它就是缺省

值。

■net.sf.hibernate.transaction.JTATransactionFactory代表了JTA。对于CMT这是正

确的策略,此时连接由JTA支持。注意如果调用beginTransaction()时已经有一个JTA事务在运行,随后的工作将发生在那个事务的上下文中(否则,将会开始一个新的JTA事务)

所以我们要记住使用J2EE服务器工作时必需的两个步骤:像前面描述的那样为Hibernate事

务API设置工厂类以支持JTA,并且声明你的应用服务器特定的事务管理器的查找策略。

配置文件

如果使用hibernate开发的话,对hibernate的配置了解清楚会很有帮助。下面是找资料总结的,如有错,请不吝指出,谢谢~

下面是关于JDBC连接配置中最重要的配置:

1.hibernate.connection.driver_class:设置连接数据库的驱动.

2.hibernate.connection.url:设置所需连接数据库服务的URL

3.hibernate.connection.username:连接数据库的用户名

4.hibernate.connection.password:连接数据库的密码

5.hibernate.connection.pool_size:设置hibernate数据库连接池的最大并发连接数

6.hibernate.dialect:设置连接数据库使用的方言

上面配置了Hibernate数据库连接池的最大连接并发数,但是Hibernate自带的连接池仅有测试价值。并不推荐在实际的项目中使用。实际项目中可以使用c3p0连接池。所以使用c3p0连接池配置代替hibernate.connection.poo_size即可。

c3p0配置如下:

1.hibernate.c3p0.max_size:c3p0连接池的最大连接数

2.hibernate.c3p0.min_size:c3p0连接池的最小连接数

3.hibernate.c3p0.timeout:c3p0连接池连接的超时时长,单位为秒

4.hibernate.c3p0.max_statements:c3p0缓存Statement的数量数

故,完整的配置文件内容如下(使用MySQL数据库):

Xml代码

<!DOCTYPEhibernate-configurationPUBLIC
"-//Hibernate/HibernateConfigurationDTD3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!--设置数据库连接的驱动-->
<propertyname="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<!--设置所需连接数据库服务的URLlocalhost可以改成远程IP地址onlinestore为数据库名-->
<propertyname="hibernate.connection.url">jdbc:mysql://localhost/onlinestore</property>
<!--设置连接数据库的用户名-->
<propertyname="hibernate.connection.username">root</property>
<!--设置连接数据库的密码-->
<propertyname="hibernate.connection.password">root</property>
<!--设置显示sql语句方便调试-->
<propertyname="hibernate.show_sql">true</property>
<!--c3p0连接池的最大连接数-->
<propertyname="hibernate.c3p0.max_size">20</property>
<!--c3p0连接池的最小连接数-->
<propertyname="hibernate.c3p0.min_size">1</property>
<!--c3p0连接池连接的超时时长如果空闲连接的空闲超过了timeout,就会删除-->
<propertyname="hibernate.c3p0.timeout">1800</property>
<!--c3p0缓存Statement的数量数-->
<propertyname="hibernate.c3p0.max_statements">50</property>
<!--sql连接方言此处为MySQL-->
<propertyname="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
</session-factory>
</hibernate-configuration>

相关推荐