原文引用:
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对象中,供以后使用