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

  • 相关阅读:
    Android license status unknown,亲测有效
    android studio 如何升级sdk
    Java就业前景如何?前途&钱途?如何成为Java工程师?
    Java程序的编写与执行、Java新手常见的问题解决
    学习java需要掌握什么基础?如何学
    Java8中你可能不知道的一些地方之Optional实战
    P1407 [国家集训队]稳定婚姻
    P5960 【模板】差分约束算法
    P3388 【模板】割点(割顶)
    2020.8.4
  • 原文地址:https://www.cnblogs.com/planted/p/15207913.html
Copyright © 2011-2022 走看看