MyBatis如何配置其他连接池

原文引用:

https://blog.csdn.net/l577125882/article/details/80954780
https://www.cnblogs.com/yixiu868/p/8142986.html
以下以MyBatis引入druid连接池为例,讲述MyBatis如何配置其他连接池


MyBatis配置druid连接池

1)引入druid的jar包

        <!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.2.0</version>
        </dependency>

2)创建配置数据源及连接池信息的配置文件
在resource目录下创建jdbc.properties

driver=com.mysql.cj.jdbc.Driver               //数据库连接驱动
url=jdbc:mysql://localhost:3306/yonghedb?characterEncoding=utf-8   //数据库连接url
username=root                     //数据库连接用户名
password=root                     //数据库连接密码
initialSize=5                     //连接池初始化创建连接个数
maxActive=10                      //连接池最大连接个数
maxWait=500                       //连接池最大连接等待时间

3)创建配置类实现DataSourceFactory
创建一个类实现DataSourceFactory,配置数据库连接池时,配置的就是该类的全路径

package com.yyy.config;

import com.alibaba.druid.pool.DruidDataSource;
import org.apache.ibatis.datasource.DataSourceFactory;

import javax.sql.DataSource;
import java.util.Properties;

public class MyBatisDruidPool implements DataSourceFactory {
    private Properties properties;
    @Override
    public void setProperties(Properties props) {
        //xml文档会将properties注入进来
        this.properties=props;
    }

    @Override
    public DataSource getDataSource() {
        //创建druid数据源
        DruidDataSource dataSource=new DruidDataSource();
        //从配置好的propeities中加载配置
        dataSource.setUsername(this.properties.getProperty("username"));
        dataSource.setPassword(this.properties.getProperty("password"));
        dataSource.setUrl(this.properties.getProperty("url"));
        dataSource.setDriverClassName(this.properties.getProperty("driver"));
        dataSource.setInitialSize(Integer.parseInt(this.properties.getProperty("initialSize")));//设置初始化连接数
        dataSource.setMaxActive(Integer.parseInt(this.properties.getProperty("maxActive")));//最大活动连接数
        dataSource.setMaxWait(Integer.parseInt(this.properties.getProperty("maxWait")));//设置最大等待时间
        //初始化连接
        try {
            dataSource.init();
        }catch (Exception e){
            e.printStackTrace();
        }
        return dataSource;
    }
}

4)配置MyBatis核心配置文件
配置MyBatis自己的连接池,只需将dataSource标签的type属性,配置为POOLED即可,若想配置druid连接池,只需将dataSource的type属性配置为上述配置类的全限定类名

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">

<!-- MyBatis的全局配置文件 -->
<configuration >
    <properties resource="jdbc.properties"/>
    <!-- 1.配置环境,可配置多个环境(比如:develop开发、test测试) -->
    <environments default="develop">
        <environment id="develop">

            <!-- 1.1.配置事务管理方式:JDBC/MANAGED
            JDBC:将事务交给JDBC管理(推荐)
            MANAGED:自己管理事务
              -->
            <transactionManager type="JDBC"></transactionManager>

            <!-- 1.2.配置数据源,即连接池 JNDI/POOLED/UNPOOLED
                JNDI:已过时
                POOLED:使用连接池(推荐)
                UNPOOLED:不使用连接池
             -->
            <dataSource type="com.yyy.config.MyBatisDruidPool">
            <!--<dataSource type="POOLED">-->
               <property name="driver" value="${driver}"/>
                <property name="url" value="${url}"/>
                <property name="username" value="${username}"/>
                <property name="password" value="${password}"/>
                <property name="initialSize" value="${initialSize}"/>
                <property name="maxActive" value="${maxActive}"/>
                <property name="maxWait" value="${maxWait}"/>
            </dataSource>
        </environment>
    </environments>

    <!-- 2.导入Mapper配置文件,如果mapper文件有多个,可以通过多个mapper标签导入 -->
    <mappers>
        <mapper resource="empMapper.xml"/>
    </mappers>
</configuration>

5)测试结果
image

针对上述过程的疑问

为什么配置druid连接池,将dataSource的type属性配置为配置类的全限定类名就可以了?
可参考最上面引用的第二篇文章(介绍的还是比较详细的)
在回答上述问题前,先思考以下,MyBatis自己支持的连接池的配置原理(参考引用文章)


数据库连接主要就是使用DataSource数据源对象,这个数据源对象中配置有数据库的连接信息例如url,username,password等,还有连接池的信息例如最大连接数,最大连接时间等。
MyBatis创建数据源对象一般在MyBatis初始化的时候,MyBatis会根据配置文件中的dataSourde的type属性来创建数据源对象。
MyBatis是通过工厂模式来创建DataSource数据源对象,
MyBatis是通过定义了抽象的工厂口:org.apache.ibatis.datasource.DataSourceFactory,通过其getDataSource()方法返回数据源DataSource:
查看上面创建druid连接池配置类的java代码,发现druid的配置类实现的也是这个接口,那么就应该可以大致回答上述疑问了。


MyBatis创建DataSource后将其放在configuration对象内的environment对象中,供以后使用

原文地址:https://www.cnblogs.com/planted/p/15207913.html