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动态设置要连接的数据库地址,用户名,密码的主要内容,如果未能解决你的问题,请参考以下文章