• 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();
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

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

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

    MyBatis的全局配置文件 src/main/resources/mybatis-config.xml

    
    DOCTYPE configuration
            PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
            "http://mybatis.org/dtd/mybatis-3-config.dtd">
    <configuration>
        <settings>
            
            <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>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    注意看上面的全局配置文件中数据库连接配置中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();
            }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

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

  • 相关阅读:
    Windows列出系统所有补丁(wmic)
    设计模式概述
    Python中list的操作4-4
    原生ajax
    计算读取速度
    C++笔试题之n阶楼梯问题:每次只能走1阶或2阶,有多少种方法走完
    Map,Set和哈希表的使用
    自动监测站主要设备介绍(​​​​​​​雨水情遥测终端机)
    【Modbus通信实验五】常见问题汇总
    基恩士软件的基本操作(四,快速编辑plc技巧)
  • 原文地址:https://blog.csdn.net/mq2856992713/article/details/126685447