最全MyBatis核心配置文件总结,可以作为工具先收藏了
前言
今天这咱主要介绍一下MyBatis的全局配置文件的使用
configuration
mybatis-config.xml文件的头部格式我们就不说了,直接从属性开始介绍,configuration为最顶层节点,其余所有的属性都必须嵌套在configuration内,MyBatis配置文件的顶层节点如下:
<properties></properties><!-- 属性 -->
<settings></settings> <!-- 设置-->
<typeAliases></typeAliases><!-- 配置别名 -->
<typeHandlers></typeHandlers><!-- 类型处理器 -->
<objectFactory></objectFactory><!-- 对象工厂 -->
<plugins></plugins><!-- 插件 -->
<environments default=""><!-- 环境配置-->
<environment id=""><!-- 环境变量 -->
<transactionManager></transactionManager><!-- 事务管理器 -->
<dataSource></dataSource><!-- 数据源 -->
</environment>
</environments>
<databaseIdProvider></databaseIdProvider><!-- 数据库厂商标识 -->
<mappers></mappers><!-- 映射器 -->
可以看到configuration内的全部顶层节点只有9个,下面我们就一个个来分析一下
properties
下面是一个相对完整的属性配置
<!-- 配置resource--> <properties resource="xxx/xxx.properties"><!-- 属性 --> <property name="jdbc.driver" value="db.properties"/> </properties> <!-- 配置url--> <properties url="http://xxxx"><!-- 属性 --> <property name="jdbc.driver" value="db.properties"/> </properties>
上面我特意分开写,就是怕引起大家的误解,因为resource和url只允许存在一个,不能同时配置两个属性,可以看到源码中的解析过程:
同时配置了resource和url会抛出异常。
配置了properties属性之后,在xml其他配置文件中可以直接通过${xxx}来读取。
properties配置有三种方式,resource或者url指定,直接配置在子节点properties中,另一种就是上一篇提到的,直接代码中去其他地方读取properties文件,然后传入build方法。
那么这三种方式既然都能配置,假如属性配置重复了,优先级是怎么样的呢?
properties优先级
properties配置的属性如果重复,优先级如下:
- 1、第一优先:在代码中直接通过properties传入build方法。
- 2、第二优先:通过resource或者url读取到的properties文件中属性。
- 3、第三优先:直接在properties内的子标签property内定义的属性。
在实际开发中,建议是只使用一种,使用多种方式混合的话会给后期维护造成困难,而且不同类型的配置属性混合时可读性也不好。
settings
settings是MyBatis中最复杂,也是最重要的内容之一。当然这里说的复杂并不是说配置方式复杂,而是settings能配置的东西非常多,一些很核心的功能都是通过settings标签配置的。下面是一个完整的属性配置示例:
<pre data-tool="mdnice编辑器" style="margin: 10px 0px; padding: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important; color: rgb(53, 53, 53); font-size: 16px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: 0.8px; orphans: 2; text-align: left; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0.8px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); text-decoration-style: initial; text-decoration-color: initial; border-radius: 5px; box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;">`<settings><!-- 设置-->
<setting name="cacheEnabled" value="false"/>
<setting name="lazyLoadingEnabled" value="false"/>
<setting name="aggressiveLazyLoading" value="false"/>
<setting name="multipleResultSetsEnabled" value="false"/>
<setting name="useColumnLabel" value="false"/>
<setting name="useGeneratedKeys" value="false"/>
<setting name="autoMappingBehavior" value="NONE"/>
<setting name="defaultExecutorType" value="SIMPLE"/>
<setting name="defaultStatementTimeout" value="100"/>
<setting name="safeRowBoundsEnabled" value="false"/>
<setting name="mapUnderscoreToCamelCase" value="false"/>
<setting name="localCacheScope" value="SESSION"/>
<setting name="jdbcTypeForNull" value="VARCHAR"/>
<setting name="lazyLoadTriggerMethods" value="equals"/>
<setting name="defaultScriptingLanguage" value="org.apache.ibatis.scripting.xmltags.XMLDynamicLanguageDriver"/>
<setting name="callSettersOnNulls" value="false"/>