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

news/2024/7/3 3:32:18

一、前言
使用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动态设置数据库连接配置参数;


http://www.niftyadmin.cn/n/1965489.html

相关文章

TCP/IP学习(30)——L2数据链路层的数据包处理详细流程

原文地址&#xff1a;TCP/IP学习(30)——L2数据链路层的数据包处理详细流程 作者&#xff1a;GFree_Wind 本文的copyleft归gfree.windgmail.com所有&#xff0c;使用GPL发布&#xff0c;可以自由拷贝&#xff0c;转载。但转载请保持文档的完整性&#xff0c;注明原作者及原链接…

一次性搞清楚equals和hashCode

在程序设计中&#xff0c;有很多的“公约”&#xff0c;遵守约定去实现你的代码&#xff0c;会让你避开很多坑&#xff0c;这些公约是前人总结出来的设计规范。 Object类是Java中的万类之祖&#xff0c;其中&#xff0c;equals和hashCode是2个非常重要的方法。 这2个方法总是被…

硬科技企业大放异彩,Nibiru、柔宇斩获国家优质投资项目特别奖

2016—2017年度国家优质投资项目推介表彰大会在京举行。 近日&#xff0c;由国家发展改革委主管&#xff0c;中国投资协会主办的2016—2017年度国家优质投资项目推介表彰活动的审定结果在北京钓鱼台国宾馆揭晓。中国投资协会会长杨庆蔚&#xff0c;中国投资协会副会长、创投委…

VirtualBox虚拟机Ubuntu设置共享文件夹,并自动挂载

一、环境 Win10系统&#xff0c;VirtualBox-5.1.22-115126Ubuntu16.04&#xff08;64位&#xff09;虚拟机二、目的在Ubuntu中能够共享Win10中的某个文件夹&#xff0c;而且能够自动挂载三、设置共享文档夹1) 安装好Ubuntu后&#xff0c;运行并登录2) 点击"设备(Devices) …

笨方法学习Python31-40

31、作出决定复习了raw_input("> ")if 变量 "Vaule":执行语句32、循环和列表count [1, 2, 3, 4, 5]for i in count:print "This is %d" % i #循环打印出count的值count.append(6) #从最后增加值count.insert(1,44) #从第…

Shell脚本入门-4

2019独角兽企业重金招聘Python工程师标准>>> 我们可以在执行 Shell 脚本时&#xff0c;向脚本传递参数&#xff0c;脚本内获取参数的格式为&#xff1a;$n。n 代表一个数字&#xff0c;1 为执行脚本的第一个参数&#xff0c;2 为执行脚本的第二个参数&#xff0c;以…

Docker初体验——踩过的那些坑!

2018‎年‎3‎月‎6‎日 Docker安装 环境&#xff1a;windows7 安装包&#xff1a;DockerToolbox-17.10.0-ce.exe &#xff08;下载地址&#xff1a;http://mirrors.aliyun.com/doc...&#xff09; 坑&#xff1a; //启动包错&#xff1a; Running pre-create checks... (def…

双11购物节火热,谨防木马乘机而入

腾讯电脑管家 2015/11/12 16:240x00 概况近期11.11购物节&#xff0c;无数的网页、软件都充斥着“血拼双11”的广告&#xff0c;这时的电脑桌面如果多了几个双11相关的快捷方式&#xff0c;或者浏览器主页被锁定成推送网购内容的导航网站&#xff0c;你会不会认为这也是正常的…