MyBatis核心配置解析

Posted Maple_XL

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MyBatis核心配置解析相关的知识,希望对你有一定的参考价值。

配置解析

核心配置文件

  • mybatis-config.xml 系统核心配置文件
  • MyBatis 的配置文件包含了会深深影响 MyBatis 行为的设置和属性信息。
  • 能配置的内容如下:
configuration(配置)
properties(属性)
settings(设置)
typeAliases(类型别名)
typeHandlers(类型处理器)
objectFactory(对象工厂)
plugins(插件)
environments(环境配置)
environment(环境变量)
transactionManager(事务管理器)
dataSource(数据源)
databaseIdProvider(数据库厂商标识)
mappers(映射器)
<!-- 注意元素节点的顺序!顺序不对会报错 -->

环境配置environments

可以在environments中配置多套环境environment
<environments default="development">
 <environment id="development">
   <transactionManager type="JDBC">
     <property name="..." value="..."/>
   </transactionManager>
   <dataSource type="POOLED">
     <property name="driver" value="${driver}"/>
     <property name="url" value="${url}"/>
     <property name="username" value="${username}"/>
     <property name="password" value="${password}"/>
   </dataSource>
 </environment>
</environments>
  • 配置MyBatis的多套运行环境,将SQL映射到多个不同的数据库上,必须指定其中一个为默认运行环境(通过default指定)

  • 子元素节点:environment

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

    • 数据源是必须配置的。

    • 有三种内建的数据源类型

      type="[UNPOOLED|POOLED|JNDI]")
      
    • unpooled:这个数据源的实现只是每次被请求时打开和关闭连接。

    • pooled:这种数据源的实现利用“池”的概念将 JDBC 连接对象组织起来 , 这是一种使得并发 Web 应用快速响应请求的流行处理方式。

    • jndi:这个数据源的实现是为了能在如 Spring 或应用服务器这类容器中使用,容器可以集中或在外部配置数据源,然后放置一个 JNDI 上下文的引用。

    • 数据源也有很多第三方的实现,比如dbcp,c3p0,druid等等....

    • transactionManager事务管理器有两种

      <transactionManager type="JDBC|MANAGED"/>
      <!--MANAGED这个配置几乎没做什么。它从来不提交或回滚一个连接,而是让容器来管理事务的整个生命周期-->
      
    • 这两种事务管理器类型都不需要设置任何属性。

    • 具体的一套环境,通过设置id进行区别,id保证唯一!

    • 子元素节点:transactionManager - [ 事务管理器 ]

      <!-- 语法 -->
      <transactionManager type="[ JDBC | MANAGED ]"/>
      
    • 子元素节点:数据源(dataSource)

  • MyBatis默认事务管理器是JDBC,连接池POOLED

属性(properties)

可以通过properties属性来引用配置文件
  1. 编写一个配置文件properties文件

    driver=com.mysql.cj.jdbc.Driver
    url=jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC&useSSL=true&useUnicode=true&characterEncoding=UTF-8
    username=root
    password=Root1234
    

    在MyBatis核心文件中引入(注意标签顺序,properties在最前面)

    <configuration>
        <properties resource="properties.properties">
    <!--        <property name="driver" value="jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC&amp;useSSL=true&amp;useUnicode=true&amp;characterEncoding=UTF-8"/>-->
        </properties>
        <environments default="development">
            <environment id="development">
                <transactionManager type="JDBC"/>
                <dataSource type="POOLED">
    <!--                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>-->
    <!--                <property name="url" value="jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC&amp;useSSL=true&amp;useUnicode=true&amp;characterEncoding=UTF-8"/>-->
    <!--                <property name="username" value="root"/>-->
    <!--                <property name="password" value="Root1234"/>-->
                    <property name="driver" value="${driver}"/>
                    <property name="url" value="${url}"/>
                    <property name="username" value="${username}"/>
                    <property name="password" value="${password}"/>
                </dataSource>
            </environment>
        </environments>
        <!--  每一个Mapper.xml都需要在MyBatis的核心配置文件中注册  -->
        <mappers>
            
        </mappers>
    </configuration>
    

类型别名typeAliases

typeAliases位于核心配置文件的第3个位置

<typeAliases>
    <!--给一个类取别名-->
    <typeAlias type="com.maple.pojo.Employee" alias="emp" />
    <!--扫描一个包-->
<!--扫描一个包,默认的别名就是这个类名,但首字母小写,可以在类名上用@Alias("别名")DIY-->
    <package name="com.maple.pojo.Employee"/>
    <!--使用基本类型时要用_类型如_int才是int而int其实是Integer-->
    <!--返回为Object、Map、List等时使用小写即可-->
</typeAliases>

settings设置

  • 下面是最常用的两个
设置名 描述 有效值 默认值
cacheEnabled 全局性地开启或关闭所有映射器配置文件中已配置的任何缓存。 true|false true
lazyLoadingEnabled 延迟加载的全局开关。当开启时,所有关联对象都会延迟加载。 特定关联关系中可通过设置 fetchType 属性来覆盖该项的开关状态。 true|false false
  • 一个配置完整的 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>

其它配置

映射器(mappers)

注册绑定我们的mapper文件

<!-- 使用相对于类路径的资源引用 -->
<mappers>
  <mapper resource="org/mybatis/builder/AuthorMapper.xml"/>
  <mapper resource="org/mybatis/builder/BlogMapper.xml"/>
  <mapper resource="org/mybatis/builder/PostMapper.xml"/>
</mappers>
<!-- 使用完全限定资源定位符(URL) -->
<mappers>
  <mapper url="file:///var/mappers/AuthorMapper.xml"/>
  <mapper url="file:///var/mappers/BlogMapper.xml"/>
  <mapper url="file:///var/mappers/PostMapper.xml"/>
</mappers>
<!-- 使用映射器接口实现类的完全限定类名 -->
<!-- 接口和配置文件须在同一个包下且须同名 -->
<mappers>
  <mapper class="org.mybatis.builder.AuthorMapper"/>
  <mapper class="org.mybatis.builder.BlogMapper"/>
  <mapper class="org.mybatis.builder.PostMapper"/>
</mappers>
<!-- 将包内的映射器接口实现全部注册为映射器 -->
<!-- 接口和配置文件须在同一个包下且须同名 -->
<mappers>
  <package name="org.mybatis.builder"/>
</mappers>

以上是关于MyBatis核心配置解析的主要内容,如果未能解决你的问题,请参考以下文章

Mybatis 源码:Mybatis配置解析

MyBatis:配置解析

Mybatis:MyBatis核心组件介绍原理解析和源码解读

Mybatis——Dao层实现映射文件深入核心配置文件深入

MyBatis的相关api以及配置解析

MyBatis源码分析四XML解析与核心对象的构建