MyBatis(三)全局配置文件 之 environments 环境配置

environment环境配置

一、environment 环境配置

  1、MyBatis 可以配置多种环境,比如开发、测试和生成环境需要有不同的配置
  2、每种环境使用一个 environment 标签进行配置并指定唯一标识符
  3、可以通过 environment 标签中的 default 属性指定一个环境的标识符来快速的切换环境

二、environment 属性

  1、environment 

    environments 指定具体环境,mybatis 可以配置多种环境,default 指定使用某种环境,可以达到快速切换环境。

    environment:配置一个具体的环境信息,id属性代表当前环境的唯一标识,必须有下面两个标签:

transactionManager:事务管理器
dataSource:数据源

     案例:

     <!-- 数据库连接环境的配置 -->
     <environments default="mysql">
         <environment id="mysql">
              <transactionManager type="JDBC" />
              
              <dataSource type="POOLED">
                  <property name="driver"  value="${jdbc.driver}" />
                  <property name="url"  value="${jdbc.url}" />
                  <property name="username"  value="${jdbc.username}" />
                  <property name="password"  value="${jdbc.password}" />
              </dataSource>
         </environment>
         
         <environment id="oracle">
              <transactionManager type="JDBC" />
              
              <dataSource type="POOLED">
                  <property name="driver"  value="${jdbc.driver}" />
                  <property name="url"  value="${jdbc.url}" />
                  <property name="username"  value="${jdbc.username}" />
                  <property name="password"  value="${jdbc.password}" />
              </dataSource>
         </environment>
     </environments>
     id :指定当前环境的唯一标识
          transactionManager 和 dataSource 都必须有

  2、transactionManager 事务管理器

    type 属性取值有:JDBC | MANAGED | 自定义

    (1)JDBC:使用了 JDBC 原生的事务管理方式,即提交和回滚都需要手动处理,依赖于从数据源得到的连接来管理事务范围。(JdbcTransactionFactory类型)

    (2)MANAGED:不提交或回滚一个连接、让容器来管理事务的整个生命周期(比如:JEE应用服务器的上下文)(ManagedTransactionFactory类型)

    (3)自定义:实现TransactionFactory接口,type指定为全类名

  3、dataSource 数据源

    type 属性取值有: POOLED | UNPOOLED | JNDI | 自定义
    (1)POOLED:使用连接池,PooledDataSourceFactory(使用Mybatis的连接池)
    (2)UNPOOLED:不使用连接池,UnpooledDataSourceFactory
    (3)JNDI:在 EJB 或应用服务这类容器中查找指定的数据源(JndiDataSourceFactory)
    (4)自定义:实现 DataSourceFactory 接口,定义数据源的获取方式,type是全类名

  4、注意:实际开发中我们使用 Spring 管理数据源,并进行事务控制的配置来覆盖上述配置

  扩展:上面的事务管理器和数据源都是在 Configuration 类中进行配置的。

public Configuration() {
    typeAliasRegistry.registerAlias("JDBC", JdbcTransactionFactory.class);
    typeAliasRegistry.registerAlias("MANAGED", ManagedTransactionFactory.class);

    typeAliasRegistry.registerAlias("JNDI", JndiDataSourceFactory.class);
    typeAliasRegistry.registerAlias("POOLED", PooledDataSourceFactory.class);
    typeAliasRegistry.registerAlias("UNPOOLED", UnpooledDataSourceFactory.class);

    typeAliasRegistry.registerAlias("PERPETUAL", PerpetualCache.class);
    typeAliasRegistry.registerAlias("FIFO", FifoCache.class);
    typeAliasRegistry.registerAlias("LRU", LruCache.class);
    typeAliasRegistry.registerAlias("SOFT", SoftCache.class);
    typeAliasRegistry.registerAlias("WEAK", WeakCache.class);

    typeAliasRegistry.registerAlias("DB_VENDOR", VendorDatabaseIdProvider.class);

    typeAliasRegistry.registerAlias("XML", XMLLanguageDriver.class);
    typeAliasRegistry.registerAlias("RAW", RawLanguageDriver.class);

    typeAliasRegistry.registerAlias("SLF4J", Slf4jImpl.class);
    typeAliasRegistry.registerAlias("COMMONS_LOGGING", JakartaCommonsLoggingImpl.class);
    typeAliasRegistry.registerAlias("LOG4J", Log4jImpl.class);
    typeAliasRegistry.registerAlias("LOG4J2", Log4j2Impl.class);
    typeAliasRegistry.registerAlias("JDK_LOGGING", Jdk14LoggingImpl.class);
    typeAliasRegistry.registerAlias("STDOUT_LOGGING", StdOutImpl.class);
    typeAliasRegistry.registerAlias("NO_LOGGING", NoLoggingImpl.class);

    typeAliasRegistry.registerAlias("CGLIB", CglibProxyFactory.class);
    typeAliasRegistry.registerAlias("JAVASSIST", JavassistProxyFactory.class);

    languageRegistry.setDefaultDriverClass(XMLLanguageDriver.class);
    languageRegistry.register(RawLanguageDriver.class);
  }
原文地址:https://www.cnblogs.com/niujifei/p/15221193.html