MyBatis | 設定ファイル | 複数のデータベース接続を定義する
データベース接続情報は environment という単位で定義する。SqlSessionFactory は environment 単位でインスタンスを作成する。
基本的には <environments> タグの default 属性に指定された environment が使用される。ただし、SqlSessionFactory を作成するときに任意の environment を指定することもできる。
データテーブル
hoge スキーマの test_table
| id | value |
|---|---|
| 1 | fizz |
| 2 | buzz |
fuga スキーマの test_table
| id | value |
|---|---|
| 1 | hoge |
| 2 | fuga |
| 3 | piyo |
ソースコード
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"> <!-- hoge をデフォルトに設定 -->
<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)); // environment を指定していない。
execute(in -> new SqlSessionFactoryBuilder().build(in, "fuga")); // environment を指定している。
}
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();
}
}
実行結果
[{id=1, value=fizz}, {id=2, value=buzz}]
[{id=1, value=hoge}, {id=2, value=fuga}, {id=3, value=piyo}]
説明
- SqlSessionFactoryBuilder#build() の第2引数で environment を指定できる。