MyBatis | Configuration File | Define Multiple Database Connections
Database connection information is defined in units called environments. SqlSessionFactory creates an instance for each environment.
By default, the environment specified in the default attribute of the <environments> tag is used. However, you can also specify any environment when creating SqlSessionFactory.
Data Tables
test_table in the hoge schema
| id | value |
|---|---|
| 1 | fizz |
| 2 | buzz |
test_table in the fuga schema
| id | value |
|---|---|
| 1 | hoge |
| 2 | fuga |
| 3 | piyo |
Source Code
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>
<environments default="hoge"> <!-- Set hoge as the default -->
<environment id="hoge">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost/hoge"/>
<property name="username" value="test"/>
<property name="password" value="test"/>
</dataSource>
</environment>
<environment id="fuga">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost/fuga"/>
<property name="username" value="test"/>
<property name="password" value="test"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="sample_mapper.xml"/>
</mappers>
</configuration>
Main.java
package sample.mybatis;
import java.io.InputStream;
import java.util.function.Function;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class Main {
public static void main(String[] args) throws Exception {
execute(in -> new SqlSessionFactoryBuilder().build(in)); // No environment specified.
execute(in -> new SqlSessionFactoryBuilder().build(in, "fuga")); // Environment specified.
}
private static void execute(Function<InputStream, SqlSessionFactory> sqlSessionFactorySupplier) throws Exception {
try (InputStream in = Main.class.getResourceAsStream("/mybatis-config.xml")) {
SqlSessionFactory factory = sqlSessionFactorySupplier.apply(in);
try (SqlSession session = factory.openSession()) {
System.out.println(session.selectList("sample.mybatis.selectTest"));
}
}
System.out.println();
}
}
Execution Result
[{id=1, value=fizz}, {id=2, value=buzz}]
[{id=1, value=hoge}, {id=2, value=fuga}, {id=3, value=piyo}]
Explanation
- You can specify the environment as the second argument of SqlSessionFactoryBuilder#build().