• Spring+SpringMVC+MyBatis深入学习及搭建(三)——MyBatis全局配置文件解析


    MyBatis的全局配置文件SqlMapConfig.xml,配置内容和顺序如下:

    properties(属性)

    setting(全局配置参数)

    typeAliases(类名别名)

    typeHandlers(类名处理器)

    objectFactory(对象工厂)

    plugins(插件)

    environments(环境集合属性对象)

      environment(环境子属性对象)

      transationManager(事务管理)

      dataSource(数据源)

    mappers(映射器)

    1.properties(属性)

    需求:

    将数据库连接参数单独配置在db.properties中,只需要在SqlMapConfig.xml中加载db.properties的属性值。在SqlMapConfig.xml中就不需要对数据库连接参数硬编码。

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

    在classpath下定义db.properties文件:

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

    在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  -->
         <properties resource="db.properties">
             <!-- properties中陪可以配置一些属性名和属性值,此处的优先加载  -->
            <!-- <property name="driver" value=""/> -->
         </properties>
     
         <!-- 和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>
     </configuration>

    properties特性:

    注意:MyBatis将按照下面的顺序来加载属性:

    (1)在properties元素体内定义的属性首先被读取。

    (2)然后会读取properties元素中resourse或url加载的属性,它会覆盖已读取的同名属性。

    (3)最后读取parameterType传递的属性,它会覆盖已读取的同名属性。

    所以这里可能就会存在一个问题:假如UserMapper.xml中的有一个statement的入参名为name,

    而db.properties中也有一个参数名叫name。

    那最终UserMapper.xml中的select会读取到name=root,而不是用户传入的值。

    建议:

    不要在properties元素体内添加任何属性值,只将属性值定义在properties文件中。

    在properties文件中定义属性名要有一定的特殊性,如:xxx.xxx.xxx,jdbc.url,jbdc.username。

    2.settings(全局参数配置)

    MyBatis框架在运行时可以调整一些运行参数。

    比如:开启二级缓存、开启延迟加载......

    全局参数将会影响MyBatis的运行行为。

    3.typeAliases(别名)重点

    3.1需求

    在mapper.xml中,定义很多的statement,而statement需要parameterType指定输入参数的类型,需要resultType指定输出结果的映射类型。

    如果在指定类型时输入类型全路径,不方便进行开发。可以针对parameterType或resultType指定的类型定义一些别名,在mapper.xml中通过别名定义,方便开发。

    3.2mybatis默认支持别名

    3.3自定义别名

    3.3.1单个别名定义

    <!-- 单个别名定义: --> 
        <typeAliases>
            <typeAlias type="joanna.yan.mybatis.entity.User" alias="user"/>
        </typeAliases>

    引用别名:

    <select id="findUserById" parameterType="int" resultType="user">
            select * from user where id=#{id}
    </select>

    3.3.2批量定义别名(常用)

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

    4.typeHandlers(类型处理器)

    MyBatis中通过typeHandlers完成jbdc类型和java类型的转换。通常情况下,MyBatis提供的类型处理器满足日常需要,不需要自定义。

    5.mappers(映射配置)

    5.1通过resource加载单个文件

    <!-- 加载映射文件 -->
        <mappers>
            <!-- 通过resource方法一次加载一个映射文件   -->
            <mapper resource="mapper/UserMapper.xml"/>
       </mappers>

    5.2通过mapper接口加载单个mapper

     <!-- 加载映射文件 -->
        <mappers>
           <!-- 
            通过mapper接口加载单个映射配置文件
                遵循一定的规范:需要将mapper接口类名和mapper.xml映射文件名称保持一致,且在一个目录中;
                以上规范的前提是:使用的是mapper代理方法;
              -->
            <mapper class="joanna.yan.mybatis.mapper.UserMapper"/>
        </mappers>

    按照上边的规范,将mapper.java和mapper.xml放在一个目录,且同名。

    5.3批量加载mapper(推荐使用)

    <mappers>
            <!-- 批量加载映射配置文件,mybatis自动扫描包下的mapper接口进行加载;
                遵循一定的规范:需要将mapper接口类名和mapper.xml映射文件名称保持一致,且在一个目录中;
                以上规范的前提是:使用的是mapper代理方法;
              -->
            <package name="joanna.yan.mybatis.mapper"/>
        </mappers>

    转载自 http://www.cnblogs.com/Joanna-Yan/p/6874672.html

  • 相关阅读:
    准备工作
    案例分析
    阅读任务
    准备工作
    案例分析作业
    情 202103226-1 编程作业
    阅读任务
    准备工作
    4 20210412-1 原型设计作业
    3 20210405-1 案例分析作业
  • 原文地址:https://www.cnblogs.com/shanheyongmu/p/7121016.html
Copyright © 2020-2023  润新知