MyBatis复习(九):MyBatis整合C3P0连接池

为什么引入连接池

首先我们要明白," 建立数据库连接 " 是相当消耗资源和时间的,同时,建立数据库连接的数量也是有限的(所以在初学时,才强烈要求操作完后,一定要记得关闭数据库连接,避免造成资源浪费)。

当多用户同时请求操作的情况下,就会造成频繁的数据库连接和关闭,导致系统性能低下。所以为了解决这个问题,就引入了"池"的概念,数据库连接池主要职责是管理"连接"(建立连接、关闭连接等),进而优化服务器应用程序的性能,提高程序执行效率和降低系统资源开销。

在创建连接池的时候,一般会初始化连接池中的连接数量,以及最大连接数量。当用户请求连接时,就会从连接池中获取连接,如果连接池的初始化连接数不够,就会添加连接数,但连接池中的连接数目不能超过连接池的最大连接数。当用户操作完后,不是关闭连接,而是将连接归还到连接池中,供下一个用户使用。这样就可以避免频繁的建立连接和关闭连接所造成的消耗。


引入c3p0连接池依赖

<dependency>
	<groupId>com.mchange</groupId>
	<artifactId>c3p0</artifactId>
	<version>0.9.5.4</version>
</dependency>

实现C3P0连接池

Myabtis内部没有引入C3P0连接池对它提供直接支持,但它提供了一个UnPooledDataSourceFactory连接池工厂类,我们可以继承该类来实现C3P0连接池

package com.cd.o2o.config.dao;

import com.mchange.v2.c3p0.ComboPooledDataSource;
import org.apache.ibatis.datasource.unpooled.UnpooledDataSourceFactory;

/**
 * MyBatis使用C3P0的数据源工厂类
 */
public class C3P0DataSourceFactory extends UnpooledDataSourceFactory {
    
    

    public C3P0DataSourceFactory() {
    
    
        this.dataSource = new ComboPooledDataSource();
    }
}

配置C3P0连接池

实现C3P0连接池后,还需要再mybatis-config.xml配置文件中修改dataSource元素。

  • dataSource元素的type属性值需改为我们实现的C3P0连接池类的全类名。

  • 并且不同数据库连接池对基本属性的命名是不同的,所以这里的基本属性也需要改成C3P0连接池特定的名称。

具体对比下面两个配置:

<!--采用POOLED连接池方式管理数据库连接-->
<dataSource type="POOLED">
	<!--数据库连接基本属性-->
    <property name="driver" value="com.mysql.jdbc.Driver"/>
    <property name="url" value="jdbc:mysql://localhost:3306/o2o?useUnicode=true&amp;useSSL=false&amp;characterEncoding=utf8"/>
    <property name="username" value="root"/>
    <property name="password" value="root"/>
</dataSource>
<!--采用C3P0连接池方式管理数据库连接-->
<dataSource type="com.cd.o2o.config.dao.C3P0DataSourceFactory">
    <!--数据库连接基本属性-->
    <property name="driverClass" value="com.mysql.jdbc.Driver"/>
    <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/o2o?useUnicode=true&amp;useSSL=false&amp;characterEncoding=utf8"/>
    <property name="user" value="root"/>
    <property name="password" value="root"/>

    <!--c3p0连接池私有属性-->
    <!--初始化连接数-->
    <property name="initial	PoolSize" value="5"/>
    <!--最小连接数,一般与初始化连接数相同-->
    <property name="minPoolSize" value="5"/>
    <!--最大连接数-->
    <property name="maxPoolSize" value="20"/>
    <!--关闭连接后不自动commit-->
    <property name="autoCommitOnClose" value="false"/>
    <!--获取连接超时时间-->
    <property name="checkoutTimeout" value="10000"/>
    <!--连接失败重试次数-->
    <property name="acquireRetryAttempts" value="2"/>
</dataSource>

MyBatis整合其它连接池

Mybatis整合其它连接池(如DBCP、Druid等)的方式其实跟整合C3P0的方式是一样的,都是先引入相关依赖,然后继承UnPooledDataSourceFactory连接池工厂类实现指定的连接池类,最后再mybatis-config.xml配置文件的dataSource元素中进行相关配置即可

猜你喜欢

转载自blog.csdn.net/weixin_42950079/article/details/106317456