environments 节点下可以拥有多个 environment子节点,类似于这样:
<environments default="development">
<environment id="development">...</environment>
<environment id="test">...</environment>
</environments>
意思就是我们可以对应多个环境,比如开发环境,测试环境等, 由environments的default属性去选择对应的enviroment
注:
2、<transactionManager type="JDBC"></transactionManager>
transactionManager:事务管理器
type用于设置mybatis采用什么方式管理事务,JDBC表示采用和JDBC一样的事务管理方式。
注:
数据库事务:主要用于处理操作量大,复杂度高的数据。比如说:在人员管理系统中,删除一个人员,既需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等。这样,这些数据库操作语句就构成了一个事务。
事务指逻辑上的一组操作,组成这组操作的各个单元,要不全部成功,要不全部不成功。
例如:A向B转账100元,对应于如下两条sql语句:
update from account set money=money+100 where name='b'; update from account set money=money-100 where name='a';Mybatis管理事务是分为两种方式:
Java JDBC事务机制
首先,我们来看看现有JDBC操作会给我们打来什么重大问题,比如有一个业务:当我们修改一个信息后再去查询这个信息,看是这是一个简单的业务,实现起来也非常容易,但当这个业务放在多线程高并发的平台下,问题自然就出现了,比如当我们执行了一个修改后,在执行查询之前有一个线程也执行了修改语句,这是我们再执行查询,看到的信息就有可能与我们修改的不同,为了解决这一问题,我们必须引入JDBC事务机制,其实代码实现上很简单,一下给出一个原理实现例子供大家参考:
private Connection conn = null; private PreparedStatement ps = null; try { conn.setAutoCommit(false); //将自动提交设置为false ps.executeUpdate("修改SQL"); //执行修改操作 ps.executeQuery("查询SQL"); //执行查询操作 conn.commit(); //当两个操作成功后手动提交 } catch (Exception e) { conn.rollback(); //一旦其中一个操作出错都将回滚,使两个操作都不成功 e.printStackTrace(); }
3、<dataSource type="POOLED"></dataSource>
dataSource 元素使用基本的 JDBC 数据源接口来配置 JDBC 连接对象的资源。
数据源/连接池:用于配置连接池和数据库连接的参数
type:用于设置mybatis是否采用连接池技术,POOLED表示mybatis采用连接池技术

<dataSource type="POOLED">的type属性、其有三种取值:
- POOLED:使用Mybatis自带的数据库连接池来管理数据库连接
- UNPOOLED:不使用任何数据库连接池来管理数据库连接
- JNDI:jndi形式使用数据库连接、主要用于项目正常使用的时候
连接池基本的思想是在系统初始化的时候,将数据库连接作为对象存储在内存中,当用户需要访问数据库时,并非建立一个新的连接,而是从连接池中取出一个已建立的空闲连接对象。使用完毕后,用户也并非将连接关闭,而是将连接放回连接池中,以供下一个请求访问使用。而连接的建立、断开都由连接池自身来管理。同时,还可以通过设置连接池的参数来控制连接池中的初始连接数、连接的上下限数以及每个连接的最大使用次数、最大空闲时间等等。也可以通过其自身的管理机制来监视数据库连接的数量、使用情况等。