持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第26天,点击查看活动详情
environments
该标签用于配置环境,通过其子标签 environment
可以配置多个环境并切换,比如:
<environments default="development">
<environment id="test">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
<environment id="development">
<transactionManager type="JDBC"/>
<!-- 配置数据源 -->
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
通过default属性指定id即可轻松切换环境,在 environment
标签中需要配置两个属性, transactionManager
和 dataSource
,其中 transactionManager
有两种取值:
- JDBC – 这个配置直接使用了 JDBC 的提交和回滚设施,它依赖从数据源获得的连接来管理事务作用域。
- MANAGED – 这个配置几乎没做什么。它从不提交或回滚一个连接,而是让容器来管理事务的整个生命周期(比如 JEE 应用服务器的上下文)。 默认情况下它会关闭连接。然而一些容器并不希望连接被关闭,因此需要将 closeConnection 属性设置为 false 来阻止默认的关闭行为。
\
dataSource
有三种取值:
- UNPOOLED ****– 这个数据源的实现会每次请求时打开和关闭连接。虽然有点慢,但对那些数据库连接可用性要求不高的简单应用程序来说,是一个很好的选择。 性能表现则依赖于使用的数据库,对某些数据库来说,使用连接池并不重要,这个配置就很适合这种情形。
- POOLED – 这种数据源的实现利用“池”的概念将 JDBC 连接对象组织起来,避免了创建新的连接实例时所必需的初始化和认证时间。 这种处理方式很流行,能使并发 Web 应用快速响应请求。
- JNDI – 这个数据源实现是为了能在如 EJB 或应用服务器这类容器中使用,容器可以集中或在外部配置数据源,然后放置一个 JNDI 上下文的数据源引用。
后期我们的数据源将交由Spring管理,所以这里简单地了解一下即可。
databaseIdProvider
该标签用于多数据库支持,可以很方便地进行数据库的移植,所以我们准备一下Oracle的配置信息,首先是数据源的配置:
orcl.driver=oracle.jdbc.OracleDriver
orcl.url=jdbc:oracle:thin:@localhost:1521:orcl
orcl.username=scott
orcl.password=123456
然后在全局配置文件中配置一个 enviroment
标签,并将环境指定为Oracle:
<environments default="oracle">
<environment id="oracle">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${orcl.driver}"/>
<property name="url" value="${orcl.url}"/>
<property name="username" value="${orcl.username}"/>
<property name="password" value="${orcl.password}"/>
</dataSource>
</environment>
<environment id="mysql">
<transactionManager type="JDBC"/>
<!-- 配置数据源 -->
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
<databaseIdProvider type="DB_VENDOR">
<!-- 为数据库厂商起一个别名 -->
<property name="MySQL" value="mysql"/>
<property name="Oracle" value="oracle"/>
</databaseIdProvider>
在这里我们使用 databaseIdProvider
标签为数据库产商起了一个别名,然后修改Mapper映射文件的内容:
<mapper namespace="com.wwj.mybatis.mapper.EmployeeMapper">
<select id="getEmpById" resultType="employee" databaseId="mysql">
select * from tbl_employee where id = #{id}
</select>
<select id="getEmpById" resultType="employee" databaseId="oracle">
select * from tbl_employee where id = #{id}
</select>
</mapper>
分别指定 databaseId
为刚才起的数据库厂商别名即可,最后不要忘记导入Oracle的驱动:
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc6</artifactId>
<version>11.2.0.3</version>
</dependency>
mappers
该标签用户注册Mapper的映射文件,比如:
<mappers>
<mapper resource="EmployeeMapper.xml"/>
</mappers>
mapper
标签共有三种方式进行注册:
- resource:注册类路径下的文件
- url:注册网络或磁盘路径下的文件
- class:注册接口,一般用在基于注解的接口上,比如:
public interface EmployeeMapper {
@Select("select * from tbl_employee where id = #{id}")
Employee getEmpById(Integer id);
}
mappers
标签还支持批量注册,用法如下:
<mappers>
<package name="com.wwj.mybatis.mapper"/>
</mappers>
但此时需要注意,Mapper映射文件必须与其绑定的接口文件名一致,且必须位于同包下,否则MyBatis是找不到映射文件的。