04. Hibernate连接池的使用

本文介绍了如何在Hibernate中使用第三方连接池C3P0来提高性能。默认的内置连接池只提供一个连接,而C3P0提供更好的性能。配置步骤包括在Hibernate.cfg.xml中设置C3P0参数,并导入必要的jar包。此外,还讲解了在JavaEE环境下,如何结合Tomcat数据源,通过JNDI配置让Hibernate使用数据源。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Hibernate连接池的使用

Hibernate中有内置的连接池,当我们配置好连接参数后实际上采用的就是默认的的内置连接池,且最大连接数量为1。

 <!-- JDBC connection pool (use the built-in) -->
 <property name="connection.pool_size">1</property>

然而这种默认的内置连接池性能并不好,我们可以采用已经集成到Hibernate中的第三方的连接池C3P0。

在 Hibernate.cfg.xml 中配置 c3p0 连接池:

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<hibernate-configuration>

    <session-factory>

        <!-- Database connection settings -->
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="connection.url">jdbc:mysql://localhost:3306/learning?useSSL=true</property>
        <property name="connection.username">root</property>
        <property name="connection.password">123456</property>
        <!-- 设置默认连接池的大小 -->
        <property name="connection.pool_size">5</property>

        <!-- 如果使用连接池的方式的话,必须告诉Hibernate一声,让它不使用单纯的JDBC连接 -->
        <property name="hibernate.temp.use_jdbc_metadata_defaults">false</property>
        <!-- 最大连接数 -->
        <property name="hibernate.c3p0.max_size">20</property>
        <!-- 最小连接数 -->
        <property name="hibernate.c3p0.min_size">5</property>
        <!-- 设置连接的超时时间,超过时间则抛出异常,单位:毫秒 -->
        <!-- 即获得连接后一定时间内未归还,则抛出异常 -->
        <property name="hibernate.c3p0.timeout">5000</property>
        <!-- 创建的PreparedStatement对象的最大数量 -->
        <property name="hibernate.c3p0.max_statements">100</property>
        <!-- 每隔指定时间检查连接池中的空闲连接,时间单位:秒 -->
        <property name="hibernate.c3p0.idle_test_period">150</property>
        <!-- 当连接池中的连接使用完毕,c3p0会再和数据库建立n个新的连接放置到连接池中 -->
        <property name="hibernate.c3p0.acquire_increment">2</property>
        <!-- 每次都验证连接是否可用 -->
        <property name="hibernate.c3p0.validate">false</property>

        <!-- SQL dialect:方言类,将操作转为对应的SQL语句 -->
        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>

        <!-- 输出操作的SQL语句 -->
        <!-- Echo all executed SQL to stdout -->
        <property name="show_sql">true</property>

        <!-- 配置映射文件 -->
        <mapping resource="com/li/pojo/Student.hbm.xml"/>

    </session-factory>

</hibernate-configuration>

配置完成之后,还需导入 c3p0 的工具包(jar包),在 Hibernate 的开发包中可以找到,位于 hibernate-release-5.2.0.Final\lib\optional\c3p0 目录下。

使用数据源的方式使用连接池

使用数据源的连接池须在JavaEE环境下。此处我们使用Tomcat获取的数据源,先在Tomcat的server.xml中为工程配置一个数据源并为数据源绑定一个JNDI名字(如下:jdbc/Hibernate)。

<Context docBase="Hibernate" path="/Hibernate" reloadable="true" source="org.eclipse.jst.jee.server:Hibernate">
         <Resource auth="Container" driverClassName="com.mysql.jdbc.Driver" maxIdle="30" maxTotal="50" maxWaitMillis="-1" name="jdbc/Hibernate" password="123456" type="javax.sql.DataSource" url="jdbc:mysql://localhost:3306/learning?useSSL=true" username="root"></Resource>
</Context>

打开开发包目录 hibernate-release-5.2.0.Final\project\etc 下的 模板配置文件 hibernate.properies,找到其中的JNDI Datasource,从这里我们可以知道怎么讲数据源的JDNI绑定到Hibernate,我们将这些添加到核心配置文件 hibernate.cfg.xml 中。

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<hibernate-configuration>

    <session-factory>

        <!-- jdbc/Hibernate:绑定所配置的数据源JNDI名称 -->
        <!-- 使用java:comp/env/前缀来指明当前在JavaEE环境中 -->
        <!-- 只需这一句就行,其他的基本配置就不需要,多此一举也会报错 -->
        <property name="hibernate.connection.datasource">java:comp/env/jdbc/Hibernate</property>

        <!-- SQL dialect:方言类,将操作转为对应的SQL语句 -->
        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>

        <!-- 输出操作的SQL语句 -->
        <!-- Echo all executed SQL to stdout -->
        <property name="show_sql">true</property>

        <!-- 配置映射文件 -->
        <mapping resource="com/li/pojo/Student.hbm.xml"/>

    </session-factory>

</hibernate-configuration>

配置过后,因为我们是在JavaEE环境下创建的应用,所以我们应该让应用获取数据源,然后我们的Hibernate才能使用这个数据源

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值