MyBatis | 설정 파일 | 여러 데이터베이스 연결 정의
데이터베이스 연결 정보는 environment라는 단위로 정의한다. SqlSessionFactory이 environment 단위로 인스턴스를 생성하게 된다.
기본적으로 <environments> 태그의 default 속성에 지정된 environment가 사용된다. 그러나 SqlSessionFactory를 생성할 때 임의의 environment를 지정할 수도 있다.
데이터 테이블
test_table@hoge 스키마
id | value |
---|---|
1 | fizz |
2 | buzz |
test_table@fuga 스키마
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()의 두 번째 인수로, environment를 지정할 수 있다.
최종 수정 : 2021-08-26