iBatis - 使用XML选择环境

Bos*_*one 3 environment ibatis xml-configuration

我有这个配置 ibatis-config.xml

<configuration>
    <properties resource="collector.properties"/>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC" />
            <dataSource type="POOLED">
                <property name="driver" value="${dev.jdbc.driver}" />
                <property name="url" value="${dev.jdbc.url}" />
            </dataSource>
        </environment>
        <environment id="test">
            <transactionManager type="JDBC" />
            <dataSource type="POOLED">
                <property name="driver" value="${test.jdbc.driver}" />
                <property name="url" value="${test.jdbc.url}" />
            </dataSource>
        </environment>
    </environments>
    <mappers>
    </mappers>
</configuration>
Run Code Online (Sandbox Code Playgroud)

如图所示,它将从中加载数据源 <environment id="development">

问题:是否可以在<environment id="test">不修改XML的情况下在运行时切换使用?例如 - 我有一个我正在使用的测试文件,SqlSessionFactory并希望以编程方式设置它以使用测试环境?

小智 7

SqlSessionFactoryBuilder.build()方法可以选择XML中的特定环境.

例如,

private Reader reader;
private SqlSessionFactory sqlSessionFactorys;
private SqlSession session;

reader = Resources.getResourceAsReader("ibatis-config.xml");

sqlSessionFactorys = new SqlSessionFactoryBuilder().build(reader, "test");
testSession = sqlSessionFactorys.openSession(); // test env

sqlSessionFactorys = new SqlSessionFactoryBuilder().build(reader, "development");
devSession = sqlSessionFactorys.openSession(); // dev env
Run Code Online (Sandbox Code Playgroud)