MyBatis全局配置文件(下)

100 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 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是找不到映射文件的。