MyBatis 教程

MyBatis 配置 environments 标签

MyBatis 可以配置多种环境,用于支持不同的数据库,例如:同时支持 Oracle 和 MySQL 数据库。也有可能是为了分别定义开发环境、测试环境和生产环境。

一个很重要的问题要记得:你可以配置多种环境(environment),但是每个 SqlSessionFactory 实例只能选择一个环境

所以,如果你想连接两个数据库,你需要创建两个 SqlSessionFactory 实例,每个数据库对应一个数据库。如果你有三个数据库,你就需要创建三个 SqlSessionFactory 实例,以此类推。

每个数据库对应一个 SqlSessionFactory

为了明确创建哪种环境的 SqlSessionFactory,你可以将环境(environment)作为可选的参数传递给 SqlSessionFactoryBuilder。

SqlSessionFactoryBuilder 的 build() 方法可接受环境配置的两个方法签名如下:

// 接受环境
SqlSessionFactory factory = sqlSessionFactoryBuilder.build(reader, environment);
// 接受环境和属性
SqlSessionFactory factory = sqlSessionFactoryBuilder.build(reader, environment, properties);

如果环境被忽略,那么默认环境将会被加载,如下进行:

SqlSessionFactory factory = sqlSessionFactoryBuilder.build(reader);
SqlSessionFactory factory = sqlSessionFactoryBuilder.build(reader, properties);

怎样配置环境(environment)呢?

要了解怎样配置环境,最直接的方式是查看 MyBatis 的 DTD 定义。如下:

<!ELEMENT environments (environment+)>
<!ATTLIST environments
default CDATA #REQUIRED
>

<!ELEMENT environment (transactionManager,dataSource)>
<!ATTLIST environment
id CDATA #REQUIRED
>

<!ELEMENT transactionManager (property*)>
<!ATTLIST transactionManager
type CDATA #REQUIRED
>

<!ELEMENT dataSource (property*)>
<!ATTLIST dataSource
type CDATA #REQUIRED
>

上面的 DTD 定义中,允许 <environments> 标签下面添加一到多个 <environment>,而每一个 <environment> 表示一个环境,并且可以通过 default 属性定义默认的环境。其中:

  • transactionManager:用来定义事务管理器

  • dataSource:用来定义数据源

示例配置

下面使用一个完整的示例演示同时配置两个环境(开发环境-development,正式环境-prod),且将开发环境设置为默认环境。配置如下:

<?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>
    <properties resource="database.properties"/>
    <environments default="development">
        <!-- 测试环境 -->
        <environment id="development">
            <!-- 事务管理器配置 -->
            <transactionManager type="JDBC">
                <property name="..." value="..."/>
            </transactionManager>
            <!-- 数据源配置 -->
            <dataSource type="POOLED">
                <property name="driver" value="${driver}"/>
                <property name="url" value="${url}"/>
                <property name="username" value="${username}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
        <!-- 正式环境 -->
        <environment id="prod">
            <!-- 事务管理器配置 -->
            <transactionManager type="JDBC">
                <property name="..." value="..."/>
            </transactionManager>
            <!-- 数据源配置 -->
            <dataSource type="POOLED">
                <property name="driver" value="${driver}"/>
                <property name="url" value="${url}"/>
                <property name="username" value="${username}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
    </environments>
    
    <mappers>
        <mapper resource="com/hxstrive/mybatis/demo1/UserMapper.xml" />
    </mappers>
</configuration>

上面配置的关键点:

  • 使用 <environments> 标签的 default 属性指定默认的环境 ID,比如:指定默认为环境为开发环境,default="development"

  • 每个 <environment> 标签通过 ID 属性定义环境唯一 ID,如:id="development"

  • 事务管理器的配置,如:type="JDBC"

  • 数据源的配置,如:type="POOLED"

默认的环境和环境 ID 是自我解释的。你可以使用你喜欢的名称来命名,只要确定默认的要匹配其中之一。

说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号