zoukankan      html  css  js  c++  java
  • 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对象中,供以后使用

  • 相关阅读:
    Asp.Net Web API 2第八课——Web API 2中的属性路由
    Asp.Net Web API 2第七课——Web API异常处理
    Asp.Net Web API 2第六课——Web API路由和动作选择
    Asp.Net Web API 2第五课——Web API路由
    开始学习python
    BMI 小程序 购物车
    深浅copy 文件操作
    字典 dict 集合set
    基本数据类型 (str,int,bool,tuple,)
    python 运算符
  • 原文地址:https://www.cnblogs.com/planted/p/15207913.html
Copyright © 2011-2022 走看看