MyBatis配置文件详谈——environment(运行环境)

本文详细解析了MyBatis中的事务管理器transactionManager和数据源dataSource的配置方法,包括JDBC、MANAGED两种事务管理和UNPOOLED、POOLED、JNDI三种数据源类型的特点及配置属性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在MyBatis中,运行环境主要的作用是配置数据库信息,他可以配置多个数据库,一般而言只需要配置其中一个就可以了。她下面又分为两个可配置的元素:事务管理器(transactionManager)和数据源(dataSource)。

1、transactionManager(事务管理器)
在MyBatis中,transactionManager提供了两个实现类,它需要实现接口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)数据库的事务。
因为它对应着两种工厂:JdbcTransactionFactory和ManagerTransactionFactory,这个工厂需要实现TransactionFactory接口,通过他们会生成Transaction对象。于是可以把事务管理器配置成为以下两种方式:

<transactionManager type="JDBC"></transactionManager>
<transactionManager type="MANAGED"></transactionManager>

这里做一下简要的说明:

  • JDBC使用JdbcTransactionFactory生产的Transaction对象实现。它是以JDBC的方式对数据库的提交和回滚进行操作。
  • MANAGED使用ManagerTransactionFactory生成ManagedTransaction对象实现。他的提交和回滚方法不用任何操作,而是把事务交给容器处理。

2、environment数据源环境
environment的主要作用时配置数据库,在MyBatis中,数据库通过三个工厂类来提供。由于存在三种数据源,所以可以有三种形式来配置他们。

 <dataSource type="UNPOOLED">
 <dataSource type="POOLED">
 <dataSource type="JNDI">

下面我们来聊一聊这三种数据源及其属性:
1、UNPOOLED
UNPOOLED采用非数据库池的管理方式,每次请求都会打开一个新的数据库连接,所以创建会比较慢。在一些对性能没有很高要求的场合可以使用它。UNPOOLED类型的数据库源可以配置以下几种属性:

  • driver:数据库驱动名
  • url:连接数据库的URL
  • username:用户名
  • password:密码
  • defaultTransactionIsolationLevel:默认的连接事务隔离级别。

2、POOLED
数据源POOLED利用“池”的概念将JDBC的Connection对象组织起来,它开始会有一些空置,并且已经连接好的数据库连接,所以请求的时候,无需再建立和验证,省去了创建新的连接实例时所需要的初始化和认证时间。它控制最大连接数,避免过多的连接导致系统瓶颈。
除了UNPOOLED下的属性外,会有更多的属性用来配置POOLED的数据源:

  • poolMaximumActiveConnections:在任意时间都存在的活动连接数量,默认值为10。
  • poolMaximumIdleConnections:在任意时间可能存在的空闲连接数。
  • poolMaximumCheckoutTime:在被强制返回之前,池中连接被检出(check out)的时间,默认值为20000毫秒。
  • poolTimeToWait:一个底层设置,如果获取连接花费了相当长的时间,他会给连接池打印状态日志,并重新尝试获取一个连接的默认值为20000毫秒。
  • poolPingQuery:发送数据库的侦测查询,用来检验连接是否处在正常工作秩序中,并准备接受请求。默认是“NO PING QUERY SET"。

3、JNDI
数据源JNDI的实现是为了能在如EJB或应用服务器这类容器中使用,容器可以集中或在外部配置数据源,然后放置一个JNDI上下文的引用。这种数据源配置只需要两个属性:

  • initial_context:用来在InitialContext中寻找上下文。
  • data_source:引用数据源实例位置上下文中进行查询。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值