Mybatis全局配置文件详解

846 阅读1分钟

「这是我参与11月更文挑战的第7天,活动详情查看:2021最后一次更文挑战

1、全局配置文件详解

在上一篇文章中,resource文件夹下有一个mybatis-config.xml的配置文件,这个配置文件是mybatis的全局配置文件,用来进行相关的全局配置,在任何操作下都生效的配置。

1.0 官方说明

MyBatis 的配置文件包含了会深深影响 MyBatis 行为的设置和属性信息。 配置文档的顶层结构如下:

1.1 configuration(配置)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<!--就是!DOCTYPE后面对应的根节点 即为该文档的文档类型-->
<configuration>
</configuration>

mapper.xml文件中,DOCTYPE 后面是 mapper。

1.1.1 properties(属性)

此属性用来引用外部源文件。源文件目录为: image.png db.properties内容为:

mysql.driver=com.mysql.jdbc.Driver
mysql.url=jdbc:mysql://localhost:3306/dev
mysql.username=root
mysql.password=123456

配置信息为:

<!--配置外部属性资源文件  通过${}进行引用-->
<properties resource="db.properties">
        <!--可以在定义内部的属性  引用方式是一样的
        <property name="mysql.username" value="root"/>
        -->
</properties>

1.1.2 settings(设置)

mybatis的设置选项 可以改变mybatis运行时行为,内容过多且不重要,具体可以参考官方文档: mybatis – MyBatis 3 | 配置

1.1.3 typeAliases(类型别名)

<!--类型别名可为 Java 类型设置一个缩写名字。 它仅用于 XML 配置,意在降低冗余的全限定类名书写-->
<typeAliases>
        <!--根据包设置包里面所有的类的别名 :会将类的名字作为别名(忽略大小写)
            还可以为包里面的类单独设置个性别名:@Alias   (默认的以类的名字作为别名就会失效)
            除了可以设置自定义的类的别名以为,mybatis还内置很多常见类型的别名
        -->
        <package name="cn.zhl.entity"/>
</typeAliases>

配置了 typeAliases ,mapper.xml中的 resultType 就不必写全限定类名了。

image.png 如果在实体类上配置了@Alias,那么mapper.xml中的 resultType 必须设置为 @Alias的值。

image.png

1.1.4 environments(环境配置)和 environment

<!-- environments 可以多个环境:
        default 默认的数据库环境
     -->
<environments default="development">
        <!--environment  配置数据库环境  id 指定当前数据库环境的唯一表示,   会被父节点default所设置-->
        <environment id="development">
                <!--事务管理器 类型
                  type = JDBC  使用jdbc的事务管理
                         MANAGED  不运用事务
                -->
                <transactionManager type="JDBC"/>
                <!--数据源
                    type 指定连接池
                    POOLED  指定使用mybatis的连接池
                    UNPOOLED 不使用连接池
                    JNDI JNDI连接池 可以在tomcat中使用
                -->
                <dataSource type="POOLED">
                        <property name="driver" value="${mysql.driver}"/>
                        <property name="url" value="${mysql.url}"/>
                        <property name="username" value="${mysql.username}"/>
                        <property name="password" value="${mysql.password}"/>
                </dataSource>
        </environment>
</environments>

1.1.5 databaseIdProvider(数据库厂商标识)

<!-- 数据库厂商标识:mybatis提供用于跨数据库平台,用于根据不同的数据库调用不同SQL
    type="DB_VENDOR" 利用数据库的厂商名称来区分
    步骤:
        1.为需要跨越数据库设置不同的厂商名称
        2.编写不同的SQL   databaseId必须登录厂商的value
    -->
<databaseIdProvider type="DB_VENDOR">
        <property name="MySQL" value="mysql"/>
        <property name="Oracle" value="oracle"/>
</databaseIdProvider>

此时mapper.xml中sql如下:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper namespace="com.zhl.mapper.UserInfoMapper">

    <!--根据id查询UserInfo实体-->
    <select id="selectUser" resultType="com.zhl.entity.UserInfo" databaseId="mysql">
        select * from user_info where uid = #{id}
    </select>
    <select id="selectUser" resultType="com.zhl.entity.UserInfo" databaseId="oracle">
        select * from user_info where uid = #{id}
    </select>
</mapper>

通过匹配不同的 databaseId 进行跨数据库平台。

1.1.6 mappers(映射器)

<!--设置映射器-->
<mappers>
        <!--4种映射方式
                1.<mapper resource   设置MapperXml 这种方式适用根据statementId进行操作
                2.<mapper class      设置Mapper接口 这种方式适用接口绑定的方式和注解
                3.<mapper url        使用磁盘的绝对路径(基本不用)
                4.<package           根据包设置包下面所有的Mapper接口, 这种方式适用接口绑定的方式和注解
        -->
        <!--<mapper resource="EmpMapper.xml"/>-->
        <!--<mapper class="cn.tulingxueyuan.mapper.EmpMapper"></mapper>-->
        <package name="cn.zhl.mapper"/>
</mappers>

package的方式,可以避免设置多个mapper标签。