<configuration>
<!--mybatis其他配置-->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<!-- 配置数据源 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/sqls?characterEncoding=utf8"/>
<property name="username" value="root"/>
<property name="password" value="admin"/>
</dataSource>
</environment>
</environments>
<!--mybatis其他配置-->
</configuration>
在mybatis的根配置文件中,有一个environments
标签。其作用是配置mybatis的环境,mybatis中运行配置多个环境。这样做的好处在于,能把多个环境拆分。例如,一个项目中测试团队与开发团队所用的环境可能不一样,此时就可以配置两个环境,并设置environments
中的default属性指定自己团队所使用的数据库。
<environments default="development">
<environment id="test">
<transactionManager type="JDBC"/>
<!-- 配置测试所使用的数据源 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/test?characterEncoding=utf8"/>
<property name="username" value="root"/>
<property name="password" value="admin"/>
</dataSource>
</environment>
<environment id="development">
<transactionManager type="JDBC"/>
<!-- 配置开发所使用的数据源 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/sqls?characterEncoding=utf8"/>
<property name="username" value="root"/>
<property name="password" value="admin"/>
</dataSource>
</environment>
</environments>
接下来解读environments
标签。
在environments
中可以有多个environment
,每个environment
以id
属性作为唯一标识。通过environments
的default
属性指定当前数据库运行环境。
在environment
标签中必须得有transactionManager
和dataSource
两个子标签。
transactionManager
指定事物管理,mybatis中可以指定JDBC 和 MANAGED
两个默认的管理器。如果指定为JDBC
,则mybatis将采用JDBC的事物管理方式来进行事物管理。如果指定为MANAGED
,mybatis则采用J2EE容器的方式控制事物。
在mybaits中也可以自定义事物管理器。如果需要自定义事物管理,则自定义事物管理器类需要实现TransactionFactory
接口。然后type
属性值指定为自定义事物管理器的全类名。
从源代码中可以看出,mybatis默认的两个事物管理值实际上是两个别名,JDBC事物管理器的全名为:JdbcTransactionFactory,MANAGED的全类名则为: ManagedTransactionFactory
源代码中查看如下:
public Configuration() {
//....
typeAliasRegistry.registerAlias("JDBC", JdbcTransactionFactory.class);
typeAliasRegistry.registerAlias("MANAGED", ManagedTransactionFactory.class);
//...
}
JdbcTransactionFactory
和ManagedTransactionFactory
都实现了TransactionFactory
接口:
按照配置文件,其根标签的configuration对应Configuration类,在configuration类中构造器中注册了JdbcTransactionFactory和ManagedTransactionFactory的别名
dataSource
标签配置了对应的数据库配置,例如数据源连接类型等。在mybatis中dataSource
的type属性可以选择有以下几种值:JNDI | POOLED | UNPOOLED | 自定义数据源
- 指定
POOLED
后,mybatis则采用自带默认的数据源进行数据库连接管理。 - 指定
UNPOOLED
后,mybatis则不采用数据源连接数据库。每次连接都创建新的会话,结束后销毁会话(销毁会话需要自己手动)。 - 指定
JNDI
后,mybatis则采用JNDI来管理数据库连接。 自定义数据源
: 当我们想采用第三方数据源管理数据库连接时,mybatis允许我们通过实现DataSourceFactory
接口来自定义数据源设置。
在mybatis中,数据源配置的别名也是Configuration类中进行了注册
从源代码中也能看出,实际上mybatis的几种默认数据源设置也是实现了DataSourceFactory
接口: