学习Mybatis框架(四)— XML 映射配置文件(SqlMapConfig.xml)

MyBatis 的配置文件包含了会深深影响 MyBatis 行为的设置(settings)和属性(properties)信息。文档的顶层结构如下:
编写时一定按照这个顺序从上到下编写
这里写图片描述

properties属性

这些属性都是可外部配置且可动态替换的,既可以在典型的 Java 属性文件中配置,亦可通过 properties 元素的子元素来传递。
举例:
将数据库连接参数单独配置在db.properties中,只需要在SqlMapConfig.xml中加载db.properties的属性值。在SqlMapConfig.xml中就不需要对数据库连接参数硬编码。

将数据库连接参数(可能变化)只配置在db.properties中,
原因:方便对参数进行统一管理,其它xml可以共享引用该db.properties。

db.properties文件:
这里写图片描述
在sqlMapConfig.xml加载属性文件:
这里写图片描述

如果属性在不只一个地方进行了配置,那么 MyBatis 将按照下面的顺序来加载:

  1. 在 properties 元素体内指定的属性首先被读取。
  2. 然后根据 properties 元素中的 resource 属性读取类路径下属性文件或根据 url 属性指定的路径读取属性文件,并覆盖已读取的同名属性。
  3. 最后读取parameterType传递的属性,并覆盖已读取的同名属性。

因此,通过方法参数传递的属性具有最高优先级,resource/url 属性中指定的配置文件次之,最低优先级的是 properties 属性中指定的属性。

建议:
不要在properties元素体内添加任何属性值(优先级最低),只将属性值定义在properties文件中。
在properties文件中定义属性名要有一定的特殊性,如:XXXXX.XXXXX.XXXX比如jdbc.username

Settings配置

这是 MyBatis 中极为重要的调整设置,它们会改变 MyBatis 的运行时行为。
举几个例子
这里写图片描述
一个配置完整的 settings 元素的示例如下:

<settings>
  <setting name="cacheEnabled" value="true"/>
  <setting name="lazyLoadingEnabled" value="true"/>
  <setting name="multipleResultSetsEnabled" value="true"/>
  <setting name="useColumnLabel" value="true"/>
  <setting name="useGeneratedKeys" value="false"/>
  <setting name="autoMappingBehavior" value="PARTIAL"/>
  <setting name="autoMappingUnknownColumnBehavior" value="WARNING"/>
  <setting name="defaultExecutorType" value="SIMPLE"/>
  <setting name="defaultStatementTimeout" value="25"/>
  <setting name="defaultFetchSize" value="100"/>
  <setting name="safeRowBoundsEnabled" value="false"/>
  <setting name="mapUnderscoreToCamelCase" value="false"/>
  <setting name="localCacheScope" value="SESSION"/>
  <setting name="jdbcTypeForNull" value="OTHER"/>
  <setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/>
</settings>

typeAliases类型别名

类型别名是为 Java 类型设置一个短的名字。它只和 XML 配置有关,存在的意义仅在于用来减少类完全限定名的冗余。例如:
自定义别名
1、单个别名定义

<typeAliases>
  <typeAlias alias="Author" type="domain.blog.Author"/>
  <typeAlias alias="Blog" type="domain.blog.Blog"/>
  <typeAlias alias="Comment" type="domain.blog.Comment"/>
  <typeAlias alias="Post" type="domain.blog.Post"/>
  <typeAlias alias="Section" type="domain.blog.Section"/>
  <typeAlias alias="Tag" type="domain.blog.Tag"/>
</typeAliases>

当这样配置时,Blog可以用在任何使用domain.blog.Blog的地方。
2、批量别名定义(推荐)
也可以指定一个包名,MyBatis 会在包名下面搜索需要的 Java Bean,比如:

<typeAliases>
  <package name="domain.blog"/>
</typeAliases>

每一个在包 domain.blog 中的 Java Bean,在没有注解的情况下,会使用 Bean 的首字母小写的非限定类名来作为它的别名。
比如 domain.blog.Author 的别名为 author;若有注解,则别名为其注解值。看下面的例子:

@Alias("author")
public class Author {
    ...
}

3.举例说明
如果在SqlMapConfig.xml配置文件添加如下配置信息:
这里写图片描述
那么我们就可以在mapper.xml映射文件中使用这个别名了,如下:
这里写图片描述
常见的 Java 类型内建的相应的类型别名
它们都是大小写不敏感的,需要注意的是由基本类型名称重复导致的特殊处理

别名 映射的类型
_byte byte
_long long
_short short

这里写图片描述
附上SqlMapConfig.xml代码

<?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">

<configuration>

    <!-- 外部配置db.properties动态替换 value-->
    <properties resource="db.properties">
    <!--properties中还可以配置一些属性名和属性值  -->
        <!-- <property name="jdbc.driver" value=""/> -->
    </properties>


    <settings>
        <!-- 开启延迟加载,注意必须写在前面 -->
            <!-- 打开延迟加载开关 -->
            <setting name="lazyLoadingEnabled" value="true"/>
            <!-- 将积极加载改为消极加载即是按需加载 -->
            <setting name="aggressiveLazyLoading" value="false"/>

        <!-- 开启二级缓存 -->
           <setting name="cacheEnabled" value="true"/>
    </settings>


    <!-- 别名定义 -->
    <typeAliases>   
        <!-- 针对单个别名定义
                type:类型的路径;  alias:别名 -->
        <!-- <typeAlias type="cn.itcast.mybatis.pojo.User" alias="user"/> -->

        <!-- 批量别名定义 
                          指定包名,mybatis自动扫描包中的po类,自动定义别名,别名就是类名(首字母大写或小写都可以)-->
        <package name="cn.itcast.mybatis.pojo"/>    
    </typeAliases>


    <!-- 和spring整合后 environments配置将废除-->
    <environments default="development">
        <environment id="development">
        <!-- 使用jdbc事务管理,事务控制由mybatis管理-->
            <transactionManager type="JDBC" />
        <!-- 数据库连接池,由mybatis管理-->
            <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>


    <!-- 加载映射文件 -->
    <mappers>
        <!-- 1、通过resource加载单个映射文件 -->
        <mapper resource="sqlmap/User.xml" /> 

        <!-- 2、通过mapper接口加载单个映射文件————class="mapper接口全限定名"
                 遵循规范:a)使用的是mapper代理方法 
                     b)需要将mapper接口类名和mapper.xml映射文件名称保持一致,且在一个目录中 -->
        <!--
         <mapper class="cn.itcast.mybatis.mapper.UserMapper" />  
         -->

         <!--3、批量加载mapper映射文件————name="mapper接口所在的包名",mybatis自动扫描包下边所有mapper接口进行加载
               遵循规范:a)使用的是mapper代理方法 
                    b)需要将mapper接口类名和mapper.xml映射文件名称保持一致,且在一个目录中-->
        <package name="cn.itcast.mybatis.mapper"/>
    </mappers> 


</configuration>

猜你喜欢

转载自blog.csdn.net/hefenglian/article/details/80631826