返回介绍

3.7 environments 配置环境

发布于 2025-04-26 13:08:32 字数 3669 浏览 0 评论 0 收藏

3.7.1 概述

配置环境可以注册多个数据源(dataSource),每一个数据源分为两大部分:一个是数据库源的配置,另外一个是数据库事务(transactionManager)的配置。我们来看一个连接池的数据源的配置,如代码清单 3-27 所示。

代码清单 3-27:配置数据源

<environments default="development">
        <environment id="development">
            <transactionManager type="JDBC">
                <property name="autoCommit" value="false"/>
            </transactionManager>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/oa"/>
                <property name="username" value="root"/>
                <property name="password" value="learn"/>
            </dataSource>
        </environment>
</environments>

我们分析一下上面的配置。

  • environments 中的属性 default,标明在缺省的情况下,我们将启用哪个数据源配置。

  • environment 元素是配置一个数据源的开始,属性 id 是设置这个数据源的标志,以便 MyBatis 上下文使用它。

  • transactionManager 配置的是数据库事务,其中 type 属性有 3 种配置方式。

(1)JDBC,采用 JDBC 方式管理事务,在独立编码中我们常常使用。

(2)MANAGED,采用容器方式管理事务,在 JNDI 数据源中常用。

(3)自定义,由使用者自定义数据库事务管理办法,适用于特殊应用。

  • property 元素则是可以配置数据源的各类属性,我们这里配置了 autoCommit = false,则是要求数据源不自动提交。

  • dataSource 标签,是配置数据源连接的信息,type 属性是提供我们对数据库连接方式的配置,同样 MyBatis 提供这么几种配置方式:

(1)UNPOOLED,非连接池数据库(UnpooledDataSource)。

(2)POOLED,连接池数据库(PooledDataSource)。

(3)JNDI,JNDI 数据源(JNDIDataSource)。

(4)自定义数据源。

其中,配置的 property 元素,就是定义数据库的各类参数。

3.7.2 数据库事务

数据库事务 MyBatis 是交由 SqlSession 去控制的,我们可以通过 SqlSession 提交(commit)或者回滚(rollback)。我们插入一个角色对象,如果成功就提交,否则就回滚,如代码清单 3-28 所示。

代码清单 3-28:数据库事务处理

try {
            sqlSession = SqlSessionFactoryUtil.openSqlSession();
            RoleMapper roleMapper = sqlSession.getMapper(RoleMapper.class);
            int count = roleMapper.insertRole(role);
            sqlSession.commit();
            return count;
        }catch(Exception ex) {
            sqlSession.rollback();
        }finally {
            sqlSession.close();
        }

在大部分的工作环境下,我们都会使用 Spring 框架来控制它,这些内容将放到第 8 章去讨论。

3.7.3 数据源

MyBatis 内部为我们提供了 3 种数据源的实现方式。

  • UNPOOLED,非连接池,使用 MyBatis 提供的 org.apache.ibatis.datasource.unpooled.UnpooledDataSource 实现。

  • POOLED,连接池,使用 MyBatis 提供的 org.apache.ibatis.datasource.pooled.PooledDataSource 实现。

  • JNDI,使用 MyBatis 提供的 org.apache.ibatis.datasource.jndi.JndiDataSourceFactory 来获取数据源。

我们只需要把数据源的属性 type 定义为 UNPOOLED、POOLED、JNDI 即可。

这 3 种实现方式比较简单,只需要配置参数即可,但有时候我们需要使用其他的数据源。如果使用自定义数据源,它必须实现 org.apache.ibatis.datasource.DataSourceFactory 接口。比如说我们可能要用 DBCP 数据源,这个时候我们需要自定义数据源,如代码清单 3-29 所示。

代码清单 3-29:使用自定义数据源

....
import org.apache.commons.dbcp2.BasicDataSource;
import org.apache.commons.dbcp2.BasicDataSourceFactory;
import org.apache.ibatis.datasource.DataSourceFactory;
public class DbcpDataSourceFactory extends BasicDataSource implements DataSourceFactory{

    private Properties props = null;
    
    @Override
    public void setProperties(Properties props) {
        this.props = props;
    }

    @Override
    public DataSource getDataSource() {
        DataSource dataSource = null;
        try {
            dataSource = BasicDataSourceFactory.createDataSource(props);
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        return dataSource;
    }    
}

使用 DBCP 数据源需要我们提供一个类去配置它。我们按照下面的方法配置就可以使用 DBCP 数据源了。

<datasource type="xxx.xxx.DbcpDataSourceFactory">

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。