日期:2014-05-16  浏览次数:20926 次

数据持久化Hibernate的标准数据库连接池配置(转)
转自:http://hi.baidu.com/lanruijin/blog/item/b57938d1267e19d2562c8453.html

以TOMCAT+MySql为例,Hibernate有两种连接数据库的方式:
1、Hibernate自行管理的数据库连接池
2、Hibernate使用当前容器配置的连接池
在网上看到很多Hibernate配置教程,可说实在的那些教程杂
乱无章,最多算是手记,对于需要了解这方面的人来说阅读
这些垃圾更是弊大于利。原谅我用垃圾这个词,但难道不是吗,
自己只要调式通了,随便几句话堆砌成一篇“技术文章”,不
管别人看不看得懂、是否条理明确和规范,这就是垃圾。
所以我写这篇文章自然就不是垃圾了,废话不多说,Hibernate
+TOMCAT配置数据库连接池标准过程。
准备工作:
1、www.Hibernate.org下载最新的Hibernate,建议3.0
版。
2、安装了MYSQL,并且将MYSQL驱动复制到TOMCAT中的common/lib下。
3、在TOMCAT中建立一个新的WEB应用(这还不会的话就不要学
了)。
4、将Hibernate下的类库--LIB文件夹下的所有JAR复制到
WEB应用WEB-INF/lib下。
5、在WEB应用WEB-INF/classes目录下建立hibernate.cfg.xml文
件,内容如下:
<?xml version='1.0' encoding='GBK'?>
<!DOCTYPE hibernate-configuration
      PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN"
      "http://hibernate.sourceforge.net/hibernate-configuration-2.0.dtd">

实际上这一步建立的是个尚未有任何配置的XML文件。
一、Hibernate自行管理的数据库连接池
顾名思义,Hibernate框架包含了自己的管理数据库连接的方法,
这一切只需要配置hibernate.cfg.xml文件即可。
完整的hibernate.cfg.xml:
<?xml version='1.0' encoding='GBK'?>
<!DOCTYPE hibernate-configuration
      PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN"
      "http://hibernate.sourceforge.net/hibernate-configuration-2.0.dtd">
<!--Hibernate self-manager connection pool-->
<hibernate-configuration>
      <session-factory>
          <property name="show_sql">true</property>
          <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
          <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
          <property name="connection.url">jdbc:mysql://localhost:3306/nihongo?useUnicode=true</property>
          <property name="connection.username">root</property>
          <property name="connection.password">kevin</property>
          <mapping resource="cat/Cat.hbm.xml"/>       
      </session-factory>
</hibernate-configuration>

以上各属性值请依照自己的情况修改即可。

2、Hibernate使用当前容器配置的连接池
容器(如TOMCAT)建立连接池,并配置JNDI,Hibernate通过调用JNDI来
使用容器的连接池。
这中方式稍微有点复杂,需要配置三个XML文件:
1、%TOMCAT_HOME%/conf/server.xml
在server.xml中,</host>这之前加入如下WEB应用上下文配置:
<Context path="/quickstart" docBase="quickstart" debug="0" > 
<Resource name="jdbc/MySql5" auth="Container" 
type="javax.sql.DataSource" driverClassName="com.mysql.jdbc.Driver" 
url="jdbc:mysql://localhost:3306/nihongo?useUnicode=true" 
username="root" password="kevin" maxActive="100" maxIdle="10" 
maxWait="-1"/></Context>

2、完整的hibernate.cfg.xml:
<?xml version='1.0' encoding='GBK'?>
<!DOCTYPE hibernate-configuration
      PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN"
      "http://hibernate.sourceforge.net/hibernate-configuration-2.0.dtd">
<!--Hibernate use JNDI to access container's connection pool-->
   <hibernate-configuration>
       <session-factory>
           <property name="connection.datasource">java:comp/env/jdbc/MySql5</property>
           <property name="show_sql">true</property>
           <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
           <mapping resource="cat/Cat.hbm.xml"/>
       </session-factory>
   </hibernate-configuration>

3、WEB应用的web.xml文件:
在web.xml的</web-app>之前加入如下配置:
<!--Hibernate use container's connection pool-->
   <resource-ref>
       <description>DB Connection</description>
       <res-ref-name>jdbc/MySql5</res-ref-name>
       <res-type>javax.sql.DataSource</res-type>
       <res-auth>Container</res-au