Java 教程-Mybatis教程-MyBatis配置文件environments和子元素transactionManager、dataSource解析

在 MyBatis 中,运行环境主要的作用是配置数据库信息,它可以配置多个数据库,一般而言只需要配置其中的一个就可以了。

它下面又分为两个可配置的元素:事务管理器(transactionManager)、数据源(dataSource)。

在实际的工作中,大部分情况下会采用 Spring 对数据源和数据库的事务进行管理,这些我们教程后面都会进行讲解。本节我们会探讨 MyBatis 自身实现的类。

运行环境配置,代码如下所示。

<environments default="development">    <environment id="development">        <transactionManager type="JDBC" />        <dataSource type="POOLED">            <property name="driver" value="${database.driver}" />            <property name="url"                value="${database.url}" />            <property name="username" value="${database.username}" />            <property name="password" value="${database.password}" />        </dataSource>    </environment></environments>

这里用到两个元素:transactionManager 和 environment。

transactionManager(事务管理器)

在 MyBatis 中,transactionManager 提供了两个实现类,它需要实现接口 Transaction(org.apache.ibatis.transaction.Transaction),它的定义代码如下所示。

public interface Transaction {
Connection getConnection() throws SQLException;

void commit() throws SQLException;

void rollback() throws SQLException;

void close() throws SQLException;

Integer getTimeout() throws SQLException;
}

从方法可知,它主要的工作就是提交(commit)、回滚(rollback)和关闭(close)数据库的事务。MyBatis 为 Transaction 提供了两个实现类:JdbcTransaction 和 ManagedTransaction,如图 1 所示。

Transaction的实现类

图 1  Transaction的实现类
于是它对应着两种工厂:JdbcTransactionFactory 和 ManagedTransactionFactory,这个工厂需要实现 TransactionFactory 接口,通过它们会生成对应的 Transaction 对象。于是可以把事务管理器配置成为以下两种方式:

<transactionManager type=”JDBC”/>
<transactionManager type=”MANAGED”/> 这里做简要的说明。

JDBC 使用 JdbcTransactionFactory 生成的 JdbcTransaction 对象实现。它是以 JDBC 的方式对数据库的提交和回滚进行操作。

MANAGED 使用 ManagedTransactionFactory 生成的 ManagedTransaction 对象实现。它的提交和回滚方法不用任何操作,而是把事务交给容器处理。在默认情况下,它会关闭连接,然而一些容器并不希望这样,因此需要将 closeConnection 属性设置为 false 来阻止它默认的关闭行为。

Leave a Reply

Your email address will not be published. Required fields are marked *