MyBatis动态设置要连接的数据库地址,用户名,密码

Posted 殇神马

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MyBatis动态设置要连接的数据库地址,用户名,密码相关的知识,希望对你有一定的参考价值。

一、前言
使用Mybatis连接数据库,可能一般我们都是在MyBatis的全局配置文件中去进行配置要连接数据库的url,用户名,密码,但是我们有的时候会有需要动态设置要连接的数据库url,用户名,密码的需求,比如我们可能是从远程动态获取要连接的数据库的连接配置参数,下面就来介绍一下Mybatis动态设置要连接的数据库配置参数方法

二、MyBatis动态设置数据库连接配置

(1)Mybatis的全局配置全部由代码动态创建

 DataSource dataSource = new PooledDataSource(
                "com.mysql.jdbc.Driver",
                url,
                username,
                password);
        Environment environment = new Environment("dev", new JdbcTransactionFactory(), dataSource);
        Configuration configuration = new Configuration(environment);
        configuration.addMapper(UserMapper.class);
        configuration.setLogImpl(StdOutImpl.class);
        configuration.setMapUnderscoreToCamelCase(true);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration);
        sEnvDBSession = sqlSessionFactory.openSession();

上面的代码就是通过代码来创建MyBatis的全局配置configuration,包括指定Mapper的注册配置,控制台打印SQL的 配置, 开启驼峰命名自动映射配置; 这样数据库的连接配置参数也是通过DataSource动态来设置的,也就实现了动态设置数据库连接配置参数的目的;
但是上面这种方式还是不够优雅的,一旦配置多的情况下,我们需要在代码中来写很多的配置,但是实际上上面除了数据库的连接配置是需要动态配置的,其他的如Mapper的注册配置,控制台打印SQL的 配置, 开启驼峰命名自动映射配置这些都是固定的,所以我们还是希望能在配置文件中去进行这些配置,可以通过下面这种方式来实现;

(2)配置文件和代码结合方式实现MyBatis的配置

MyBatis的全局配置文件 src/main/resources/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>
        <!-- 控制台打印sql语句 -->
        <setting name="logImpl" value="STDOUT_LOGGING"/>
        <!-- 开启驼峰命名自动映射配置 -->
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>

    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="$jdbc.driver"/>
                <property name="url" value="$jdbc.url"/>
                <property name="username" value="$jdbc.username"/>
                <property name="password" value="$jdbc.password"/>
            </dataSource>
        </environment>
    </environments>

    <mappers>
        <mapper resource="com/dreame/commontool/database/mapper/UserMapper.xml"/>
    </mappers>

</configuration>

注意看上面的全局配置文件中数据库连接配置中dataSource中driver,url,username,password属性值都是通过
$jdbc.xxx动态获取属性的方式;同时配置了Mapper的注册,控制台打印SQL, 开启驼峰命名自动映射等配置;
然后我们在代码中创建SqlSessionFactory的时候将这些属性值动态传进来即可,如下

 try 
            Properties properties = new Properties();
            properties.setProperty("jdbc.driver", "com.mysql.jdbc.Driver");
            properties.setProperty("jdbc.url", url);
            properties.setProperty("jdbc.username", username);
            properties.setProperty("jdbc.password", password);
            String resource = "mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream, properties);
            sEnvDBSession = sqlSessionFactory.openSession();
          
         catch (IOException e) 
            e.printStackTrace();
        

注意上面代码中setProperty的属性名jdbc.driver,jdbc.url,jdbc.username,jdbc.password要和配置文件中引用的属性名要对应上;
这样就实现了数据库连接配置参数是动态设置的,其他配置参数是直接从配置文件中固定配置的需求;
相对比较优雅的实现了MyBatis动态设置数据库连接配置参数;

以上是关于MyBatis动态设置要连接的数据库地址,用户名,密码的主要内容,如果未能解决你的问题,请参考以下文章

MyBatis动态设置要连接的数据库地址,用户名,密码

mybatis Opening JDBC Connection卡住

MyBatis的动态sql语句

mybatis深入之动态查询和连接池介绍

MyBatis 动态sql?

Spring Boot:实现MyBatis动态数据源