05_Hibernate数据库连接池

一.配置连接池

连接池:连接池是创建和管理数据库连接的缓冲池技术。

优点:合理利用数据库连接资源、简化的编程模式、受控的资源使用、

主流连接池:

        DBCP(DataBase connection pool):数据库连接池,是 tomcat使用的连接池组件,dbcp没有自动的去回收空闲连接的功能。

C3P0:C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。目前使用它的开源项目有Hibernate,Spring等。c3p0有自动回收空闲连接功能。

 

配置c3p0连接池

引入c3p0-0.9.1.jar

在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>
        <!--配置连接池-->
        <!-- 使用c3po连接池  配置连接池提供的供应商-->
        <property name="connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
        <!--在连接池中可用的数据库连接的最少数目 -->
        <property name="c3p0.min_size">5</property>
        <!--在连接池中所有数据库连接的最大数目  -->
        <property name="c3p0.max_size">20</property>
        <!--设定数据库连接的过期时间,以秒为单位,
        如果连接池中的某个数据库连接处于空闲状态的时间超过了timeout时间,就会从连接池中清除 -->
        <property name="c3p0.timeout">120</property>
        <!--每3000秒检查所有连接池中的空闲连接 以秒为单位-->
        <property name="c3p0.idle_test_period">3000</property>

        <!--配置数据库驱动-->
        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver </property>
        <!--配置数据库连接url-->
        <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/crm?characterEncoding=utf-8</property>
        <!--数据库用户名-->
        <property name="hibernate.connection.username">root</property>
        <!--数据库密码-->
        <property name="hibernate.connection.password">123456</property>
        <!--配置数据库连接池-->
        <property name="hibernate.connection.pool_size">1</property>
        <!--配置数据库方言-->
        <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
        <!--运行时输出sql语句-->
        <property name="hibernate.show_sql">true</property>
        <!--格式化sql语句·-->
        <property name="hibernate.format_sql">true</property>
        <!--指定session 与当前线程绑定-->
        <property name="hibernate.current_session_context_class">thread</property>
        <!--动态创建或更新表 /create、drop、update、-->
        <property name="hibernate.hbm2ddl.auto">update</property>
        <!--开启二级缓存-->
        <property name="hibernate.cache.use_second_level_cache">true</property>
        <property name="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</property>
        <!--列出所有映射文件 -->
        <mapping resource="icss/onetomany/Dept.hbm.xml"/>
        <mapping resource="icss/onetomany/Emp.hbm.xml"/>
        <!--可以缓存 类、集合 缓存-->
        <class-cache class="onetomany.Dept" usage="read-only"></class-cache>
        <class-cache class="onetomany.Emp" usage="read-only"></class-cache>
        <collection-cache collection="onetomany.Dept.emps" usage="read-only"></collection-cache>
    </session-factory>
</hibernate-configuration>

数据库连接池的工作原理:数据库连接池的基本思想就是为数据库连接建立一个“缓冲池”。预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从“缓冲池”中取出一个,使用完毕之后再放回去。我们可以通过设定连接池最大连接数来防止系统无尽的与数据库连接。更为重要的是我们可以通过连接池的管理机制监视数据库的连接的数量﹑使用情况,为系统开发﹑测试及性能调整提供依据。

测试C3p0:

public class TestC3p0 {
    @Test
    public void test(){
        Session session = HibernateUtils.openSession();
        Transaction ts = session.beginTransaction();
        //查询部门信息
        String hql = "from Dept";
        Query query = session.createQuery(hql);
        List<Dept> list = query.list();
        for(int i = 0; i <list.size() ; i++) {
            Dept dept = list.get(i);
            System.out.println(dept.getDname());
        }
        System.out.println();

        ts.commit();
        session.close();
    }

}

 

posted @ 2019-08-28 11:58  杰醍奋  阅读(319)  评论(0编辑  收藏  举报