欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2024-03-23 22:28:22
...

MyBatis 的配置文件包含了会深深影响 MyBatis 行为的设置(settings)和属性(properties)信息。文档的顶层结构如下:
编写时一定按照这个顺序从上到下编写
学习Mybatis框架(四)—	XML 映射配置文件(SqlMapConfig.xml)

properties属性

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

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

db.properties文件:
学习Mybatis框架(四)—	XML 映射配置文件(SqlMapConfig.xml)
在sqlMapConfig.xml加载属性文件:
学习Mybatis框架(四)—	XML 映射配置文件(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 的运行时行为。
举几个例子
学习Mybatis框架(四)—	XML 映射配置文件(SqlMapConfig.xml)
一个配置完整的 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配置文件添加如下配置信息:
学习Mybatis框架(四)—	XML 映射配置文件(SqlMapConfig.xml)
那么我们就可以在mapper.xml映射文件中使用这个别名了,如下:
学习Mybatis框架(四)—	XML 映射配置文件(SqlMapConfig.xml)
常见的 Java 类型内建的相应的类型别名
它们都是大小写不敏感的,需要注意的是由基本类型名称重复导致的特殊处理

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

学习Mybatis框架(四)—	XML 映射配置文件(SqlMapConfig.xml)
附上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>
相关标签: Mybatis框架