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);
}