【MyBatis】(2)xml 配置文件

【MyBatis】(2)xml 配置文件

前言

该篇文章为mybatis-config.xml的笔记,主要记录 xml 配置文件中比较主要的配置(不是所有的配置)。也就是xml中的各种标签。参考自官方文档

一、settings(设置)

这是 MyBatis 中极为重要的调整设置,它们会改变 MyBatis 的运行时行为。 下表 描述了设置中各项设置的含义、默认值等。

比如:logImpl属性,用于指定 MyBatis 所用日志的具体实现,未指定时将自动查找。

其他属性在 官网的表格 中已经详细描述了各个设置。

二、typeAliases(类型别名)

类型别名可为 Java 类型设置一个缩写名字。 它仅用于 XML 配置,意在降低冗余的全限定类名书写。

可以在xml配置文件中设置别名,这样就不需要在xml映射文件中写全限定路径了(全限定路径:包名+类名)。

三、environments(环境配置)

MyBatis 可以配置成适应多种环境,这种机制有助于将 SQL 映射应用于多种数据库之中, 现实情况下有多种理由需要这么做。例如,开发、测试和生产环境需要有不同的配置;或者想在具有相同 Schema 的多个生产数据库中使用相同的 SQL 映射。还有许多类似的使用场景。

environments 标签下只有一个标签元素,即environment:用于配置多种环境。environments 标签中的"default"属性表示默认使用的环境,default属性值为environment标签中的id值。

1.environment

environment 标签下有两个子标签,分别是transactionManager(事务管理器)和 dataSource(数据源)。

1.1 transactionManager(事务管理器)

在 MyBatis 中有两种类型的事务管理器(也就是 type="[JDBC|MANAGED]"):

  • JDBC – 这个配置直接使用了 JDBC 的提交和回滚设施,它依赖从数据源获得的连接来管理事务作用域。
  • MANAGED – 这个配置几乎没做什么。它从不提交或回滚一个连接,而是让容器来管理事务的整个生命周期(比如 JEE 应用服务器的上下文)。

注意:如果你正在使用 Spring + MyBatis,则没有必要配置事务管理器,因为 Spring 模块会使用自带的管理器来覆盖前面的配置。

备注:上面也就是说,如果使用了Spring(声明式事务),此时应该设置为MANAGED,即把事务转交给其他容器,相当于原生的JDBC事务setAutoCommit(false),自动提交设置成了false。此时其他容器(Spring)帮你提交,那么就是其他容器帮你回滚。

1.2 dataSource(数据源)

dataSource 元素使用标准的 JDBC 数据源接口来配置 JDBC 连接对象的资源。

有三种内建的数据源类型(也就是 type="[UNPOOLED|POOLED|JNDI]"):

  • UNPOOLED:这个数据源的实现会每次请求时打开和关闭连接。虽然有点慢,但对那些数据库连接可用性要求不高的简单应用程序来说,是一个很好的选择。 性能表现则依赖于使用的数据库,对某些数据库来说,使用连接池并不重要,这个配置就很适合这种情形。
  • POOLED:这种数据源的实现利用“池”的概念将 JDBC 连接对象组织起来,避免了创建新的连接实例时所必需的初始化和认证时间。 这种处理方式很流行,能使并发 Web 应用快速响应请求。POOLED:
  • JNDI:这个数据源实现是为了能在如 EJB 或应用服务器这类容器中使用,容器可以集中或在外部配置数据源,然后放置一个 JNDI 上下文的数据源引用。

三种数据源类型的属性详情请查看: 数据源(dataSource)

四、mappers(映射器)

我们需要告诉 MyBatis 到哪里去找到这些语句。 在自动查找资源方面,Java 并没有提供一个很好的解决方案,所以最好的办法是直接告诉 MyBatis 到哪里去找映射文件。 你可以使用相对于类路径的资源引用,或完全限定资源定位符(包括 file:/// 形式的 URL),或类名和包名等。

一共有四种方式:

  • 使用相对于类路径的资源引用
  • 使用完全限定资源定位符(URL)
  • 使用映射器接口实现类的完全限定类名
  • 将包内的映射器接口实现全部注册为映射器

代码如下:

    <!-- 映射器 -->
    <mappers>
        <!--用相对于类路径的资源引用(加载映射文件)-->
        <mapper resource="mapper/UserMapper.xml"></mapper>
        <!--将包内的映射器接口实现全部注册为映射器(加载接口)-->
        <!-- <mapper class="mapper.UserMapper"></mapper>-->
        <!--使用完全限定资源定位符(URL)(加载地址)-->
        <!--<mapper url="D://UserMapper.xml"></mapper>-->
        <!--使用映射器接口实现类的完全限定类名(加载接口实现类)-->
        <!--<package name="com.shengjava.mapper"></package>-->
    </mappers>

更多例子