1. 程式人生 > 其它 >MyBatis如何配置其他連線池

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)測試結果

針對上述過程的疑問

為什麼配置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物件中,供以後使用