MyBatis中的environments是用来配置环境的,他可以将你的sql语句映射到多种数据库之上。使你不用改变你的sql语句就可以操作不同的数据库。虽然环境配置可以设置多个,但是在使用的时候同时只能选择一个,默认使用的是evvironments中的default属性的参数。下面是一个environments的配置示例:
<environments default="development">
<environment id="development">
<transactionManager type="JDBC">
</transactionManager>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
enviranments配置说明:
- environments中的default属性用来指定当前环境,有development(默认)和work两种模式
- environment-id是每种配置的环境ID,有development(默认)和work两种模式
- transactionManager中type是指定事务管理器类型,有JDBC和MANAGED两种
- dataSource中type指定数据源类型,有UNPOOLED、POOLED和JDNI三种
1、transactionManager事务管理器
注意:事务管理器类型的区别,JDBC以其方式进行数据库的提交和回滚操作,且必须进行commit操作,而MANAGED方式是把事务提交给容器进行处理。
- 自定义事务管理器
1、创建一个事务管理器,继承ManageTransaction或实现JdbcTransaction接口;
2、创建事务管理工厂类,实现TransactionFactory接口,提供事务处理相关的接口;
3、配置自定义事务管理器:
<transactionManager type="com.daily.objectfactory.MyTransactionFactory" />
注意这里加载的是事务管理工厂类,而非事务管理器类,因为在MyBatis中是根据工厂获取实例的。
2、dataSource数据源
MyBatis的DataSource配置有三种内置的数据源类型:
- UNPOOLED
此数据源的实现是每次被请求时简单打开和关闭连接,仅仅是用来配置一下5个属性:
- driver:JDBC驱动的Java类的完全限定名;
- url:数据库JDBC URL地址;
- username:数据库登录名;
- password :数据库登录密码;
- defaultTransactionIsolationLecel:默认连接事务隔离级别;
若是可选项,传递属性时,前缀是以 driver. 开头的,是通过DricverManager.getConnection(url,driverProperties)方法传递给数据库驱动的。
- POOLED
此为数据源的连接池实现方式,避免了创建新连接时的必要的初始连接和认证时间。是当前web应用中高效响应的方法。除了上面的数据库基本信息配置之外,还可以有许多属性来配置POOLED数据源:
- poolMaximumActiveConnections:任意时间正在使用的数量,默认10;
- poolMaximumIdleConnections:任意时间空闲的连接数;
- poolMaximumCheckoutTime:强制返回前,池中连接被检查的时间,默认20s;
- poolTimeToWait:数据连接等待时间,默认20s;
- poolPingQuery:发送到数据的侦测查询,验证连接是否正常,默认“NO PING QUERY SET”,会引起许多数据库驱动连接由一个错误信息而导致失败;
- poolPingEnabled:是否开启侦测查询,若开启,需设置合法sql给poolPingQuery,默认false;
- poolPingConnectionsNotUsedFor:配置poolPingQuery使用间隔时长。可以设置连接超时时间,避免不必要的侦测,默认0;
- JNDI
JNDI数据源的实现是为了使用如spring或应用服务器类的容器,可以集中在外部配置数据源,放置JNDI上下文的引用,只需要配置两个属性:
- initial_context:从初始环境中寻找环境( 也 就 是
initialContext.lookup(initial——context)),可选,若被忽略,data_source 属性将会直接以initialContext 为背景再次寻找; - data_source:引用数据源实例位置的上下文路径,以由 initial_context查询返回的环境为背景来查找,如果 initial_context 没有返回结果时,直接以初始上下文为环境来查找。
也可以通过名为“env.”的前缀直接向初始上下文发送属性。