Mybatis整合Druid连接池,及相关说明。

目录

(1)第一步:通过maven引入Druid的依赖

(2)第二步:创建Druid和Mybatis兼容所需的数据源工厂类:DruidDataSourceFactory类

(3)第三步:在mybatis-config.xml中设置一下

(4)第四步:测试


(1)第一步:通过maven引入Druid的依赖

java mybatisplus durid 动态设置连接数 mybatis配置druid连接池_Source


 

(2)第二步:创建Druid和Mybatis兼容所需的数据源工厂类:DruidDataSourceFactory类

java mybatisplus durid 动态设置连接数 mybatis配置druid连接池_Source_02

DruidDataSourceFactory:

package com.imooc.oa.datasource;

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

import javax.sql.DataSource;
import java.sql.SQLException;

/**
 * Druid的数据源工厂类
 */
public class DruidDataSourceFactory extends UnpooledDataSourceFactory {
    /**
     * 一个默认的构造函数:用意是通过代码手动的去实例化数据源对象;
     */
    public DruidDataSourceFactory(){
        this.dataSource = new DruidDataSource();
    }

    @Override
    public DataSource getDataSource() {
        try {
            ((DruidDataSource) this.dataSource).init();
        } catch (SQLException e) {
            throw new RuntimeException(e); // 如果产生错误,直接把其包装成一个运行异常抛出去;
        }
        return this.dataSource;
    }
}

说明:

(1)DruidDataSourceFactory类:需要集成UnpooledDataSource父类,重新给dataSource对象赋值;

java mybatisplus durid 动态设置连接数 mybatis配置druid连接池_Source_03

(2)DruidDataSourceFactory类:对于Druid连接池来说,需要重写父类(UnpooledDataSource类)的getDataSource方法

java mybatisplus durid 动态设置连接数 mybatis配置druid连接池_Source_04

(3)DataSource数据源接口:说明1

java mybatisplus durid 动态设置连接数 mybatis配置druid连接池_Source_05

java mybatisplus durid 动态设置连接数 mybatis配置druid连接池_数据源_06

所以,getDataSource()方法的返回值DataSource其实际上就是DruidDataSource这个实现了DataSource接口的实现类

java mybatisplus durid 动态设置连接数 mybatis配置druid连接池_连接池_07

(4)DataSource数据源接口:说明2

DataSource接口是行业的标准,是一个规则,,,,每一个数据库连接池产品都要按这个接口的标准来去定义与之对应的实现类。

这样设计的好处:当我们某天不使用Druid,改用其他的数据库连接池,只需要实例化不同的DataSource实现类就可以了:

java mybatisplus durid 动态设置连接数 mybatis配置druid连接池_数据源_08


 

(3)第三步:在mybatis-config.xml中设置一下

<?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">
<configuration>
    <!--开启驼峰命名转换-->
    <settings>
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>

    <environments default="dev">
        <!--开发环境配置-->
        <environment id="dev">
            <!--事务管理器采用JDBC方式-->
            <transactionManager type="JDBC"></transactionManager>
            <!--暂时利用Mybatis自带连接池管理连接-->
            <dataSource type="com.imooc.oa.datasource.DruidDataSourceFactory">
                <!--以下几项,就是JDBC连接属性了-->
                <!--设置MySQL驱动类;因为我们使用的MySQL驱动是8版本,所以这儿的value需要加上"cj"-->
                <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
                <!--设置url数据库连接字符串。。。其中【characterEncoding=UTF-8】(采用UTF-8编码进行数据传输)
                和【serverTimezone=Asia/Shanghai】(设置当前服务器的时区,这样才数据库中存储的时间才是正确的。)-->
                <property name="url" value="jdbc:mysql://localhost:3306/imooc-oa ? useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true"/>
                <property name="username" value="root"/>
                <property name="password" value="12345"/>
                <!--连接池初始连接数-->
                <property name="initialSize" value="10"/>
                <!--连接池最大连接数-->
                <property name="maxActive" value="20"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="mappers/test.xml"/>
    </mappers>
</configuration>

 

说明:

预:和原先内容的对比:

java mybatisplus durid 动态设置连接数 mybatis配置druid连接池_Source_09

(1)首先,设置type属性,让其指向设置的那个属性

java mybatisplus durid 动态设置连接数 mybatis配置druid连接池_数据源_10

(2)driverClassName等属性名修改了:这些属性名为什么要修改???

java mybatisplus durid 动态设置连接数 mybatis配置druid连接池_连接池_11

java mybatisplus durid 动态设置连接数 mybatis配置druid连接池_连接池_12

其还有其他属性名:

java mybatisplus durid 动态设置连接数 mybatis配置druid连接池_Source_13

想表达的意思就是:当使用Druid连接池的时候,mybatis-config.xml中设置的属性的名字必须要和DruidDataSource类内部定义好的那些属性名。

java mybatisplus durid 动态设置连接数 mybatis配置druid连接池_数据源_14

(3)DruidDataSourceFactory类的深入分析1:实例化dataSource对象

java mybatisplus durid 动态设置连接数 mybatis配置druid连接池_数据源_15

java mybatisplus durid 动态设置连接数 mybatis配置druid连接池_连接池_16

java mybatisplus durid 动态设置连接数 mybatis配置druid连接池_连接池_17

(4)DruidDataSourceFactory类的深入分析2:setProperties方法

java mybatisplus durid 动态设置连接数 mybatis配置druid连接池_连接池_18

java mybatisplus durid 动态设置连接数 mybatis配置druid连接池_Source_19

这样以后,setProperties方法执行完了之后,这个DataSource的实现类DruidDataSource中就包含了在mybatis-config.xml中配置的连接信息了。

(5)DruidDataSourceFactory类的深入分析3:对于Druid连接池来说,还需要调用init()方法;来对数据源进行初始化;因此,需要重写getDataSource方法

java mybatisplus durid 动态设置连接数 mybatis配置druid连接池_数据源_20

这儿只是Druid连接池进行了初始化,而前面遇到的C3P0连接池就不需要调用init()方法去初始化。

是否需要重写getDataSource()方法是根据【对应的连接池产品是否需要在获取数据源时进行某些额外的操作】决定的。。。。。因为,Druid连接池在获取连接时,需要调用init()方法对这个数据源进行检查和初始化的工作,所以,这儿需要重写getDataSource()方法。。。。。。。。

java mybatisplus durid 动态设置连接数 mybatis配置druid连接池_连接池_21

(6)上面的执行顺序

java mybatisplus durid 动态设置连接数 mybatis配置druid连接池_Source_22

这样以后:

java mybatisplus durid 动态设置连接数 mybatis配置druid连接池_数据源_23


 

(4)第四步:测试

java mybatisplus durid 动态设置连接数 mybatis配置druid连接池_连接池_24