3.7 environments 配置环境
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">
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论