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 を指定できる。