这些是非常重要的调整,它们修改了MyBatis在运行时的行为方式。下表描述了这些设置以及它们的含义和默认值。
Setting | Description | Valid Values | Default |
---|---|---|---|
cacheEnabled | 全局启用或禁用配置在此配置下的任何mapper中的所有缓存。 | true | false | true |
lazyLoadingEnabled | 全局启用或禁用延迟加载。当启用时,所有关联将进行延迟加载。可以通过在特定关联上使用fetchType属性来覆盖此值。 | true | false | false |
aggressiveLazyLoading | 当启用时,任何方法调用将加载对象的所有延迟属性。否则,每个属性将按需加载(参见lazyLoadTriggerMethods)。 | true | false | false (true in ≤3.4.1) |
multipleResultSetsEnabled | 允许或禁止从单个语句中返回多个结果集(需要兼容的驱动程序)。 | true | false | true |
useColumnLabel | 使用列标签而不是列名。不同的驱动程序在这方面的行为可能会有所不同。请参考驱动程序的文档,或者测试两种模式以确定您的驱动程序的行为方式。 | true | false | true |
useGeneratedKeys | 允许对生成的键提供JDBC支持。需要一个兼容的驱动程序。如果设置为true,此设置将强制使用生成的键,因为某些驱动程序拒绝兼容性但仍然能正常工作(例如Derby驱动程序)。 | true | false | False |
autoMappingBehavior | 指定MyBatis是否以及如何自动将列映射到字段/属性。NONE禁用自动映射。PARTIAL只会自动映射未定义内部嵌套结果映射的结果。FULL将自动映射任何复杂性的结果映射(包含嵌套或其他情况)。
| NONE, PARTIAL, FULL | PARTIAL |
autoMappingUnknownColumnBehavior | 当自动映射目标检测到未知列(或未知属性类型)时,指定其行为。
请注意,当autoMappingBehavior设置为FULL时,可能会出现误报。 | NONE, WARNING, FAILING | NONE |
defaultExecutorType | 配置默认的执行器(Executor)。
根据需求选择适合的执行器配置。 | SIMPLE REUSE BATCH | SIMPLE |
defaultStatementTimeout | 设置驱动程序等待数据库响应的时间,单位为秒。 | Any positive integer | Not Set (null) |
defaultFetchSize | 为驱动程序设置一个提示,以控制返回结果的提取大小。这个参数的值可以被查询的设置所覆盖。 | Any positive integer | Not Set (null) |
defaultResultSetType | 在每个语句的设置中忽略时,指定滚动策略。(自3.5.2版本起可用) | FORWARD_ONLY | SCROLL_SENSITIVE | SCROLL_INSENSITIVE | DEFAULT(same behavior with ‘Not Set’) | Not Set (null) |
safeRowBoundsEnabled | 允许在嵌套语句上使用RowBounds。如果允许,请将其设置为false。 | true | false | False |
safeResultHandlerEnabled | 允许在嵌套语句上使用ResultHandler。如果允许,请将其设置为false。 | true | false | True |
mapUnderscoreToCamelCase | 启用从经典数据库列名A_COLUMN到驼峰式经典Java属性名aColumn的自动映射。 | true | false | False |
localCacheScope | MyBatis使用本地缓存来防止循环引用并加快重复嵌套查询的速度。默认情况下(SESSION),在一个会话期间执行的所有查询都会被缓存起来。如果设置localCacheScope为STATEMENT,则本地会话仅用于语句执行,同一个SqlSession的两次不同调用之间的数据不会被共享。 | SESSION | STATEMENT | SESSION |
jdbcTypeForNull | 在未为参数指定特定的JDBC类型时,指定null值的JDBC类型。有些驱动程序需要指定列的JDBC类型,而其他驱动程序可以使用通用的值,如NULL、VARCHAR或OTHER。 | JdbcType enumeration. Most common are: NULL, VARCHAR and OTHER | OTHER |
lazyLoadTriggerMethods | 指定哪些对象的方法触发延迟加载。 | A method name list separated by commas | equals,clone,hashCode,toString |
defaultScriptingLanguage | 指定默认用于动态SQL生成的语言。 | A type alias or fully qualified class name. | org.apache.ibatis.scripting.xmltags.XMLLanguageDriver |
defaultEnumTypeHandler | 指定默认情况下用于枚举类型的TypeHandler。(自3.4.5版本起可用) | A type alias or fully qualified class name. | org.apache.ibatis.type.EnumTypeHandler |
callSettersOnNulls | 指定当检索到的值为null时,是调用setter方法还是map的put方法。当您依赖于Map.keySet()或null值初始化时,这很有用。请注意,像int、boolean等原始类型将不会设置为null。 | true | false | false |
returnInstanceForEmptyRow | MyBatis默认情况下,在返回的行的所有列都为NULL时,返回null。当启用此设置时,MyBatis将返回一个空实例。请注意,这也适用于嵌套结果(例如集合和关联)。自3.4.2版本起可用。 | true | false | false |
logPrefix | 指定MyBatis将添加到日志记录器名称前面的前缀字符串。 | Any String | Not set |
logImpl | 指定MyBatis应使用哪个日志实现。如果未设置此选项,则将自动发现日志实现。 | SLF4J | LOG4J(deprecated since 3.5.9) | LOG4J2 | JDK_LOGGING | COMMONS_LOGGING | STDOUT_LOGGING | NO_LOGGING | Not set |
proxyFactory | 指定MyBatis将使用的代理工具来创建支持延迟加载的对象。 | CGLIB (deprecated since 3.5.10) | JAVASSIST | JAVASSIST (MyBatis 3.3 or above) |
vfsImpl | 指定VFS(虚拟文件系统)的实现。 | Fully qualified class names of custom VFS implementation separated by commas. | Not set |
useActualParamName | 允许使用方法签名中声明的实际参数名称来引用语句参数。要使用此功能,您的项目必须在Java 8中使用 -parameters 选项进行编译。 (自3.4.1版本起可用) | true | false | true |
configurationFactory | 指定一个提供Configuration实例的类。返回的Configuration实例用于加载反序列化对象的延迟属性。这个类必须有一个方法,签名为static Configuration getConfiguration()。(自3.2.3版本起可用) | A type alias or fully qualified class name. | Not set |
shrinkWhitespacesInSql | 从SQL中删除额外的空白字符。请注意,这也会影响SQL中的字面字符串。(自3.5.5版本起可用) | true | false | false |
defaultSqlProviderType | 指定一个SQL提供程序类,该类包含提供程序方法(自3.5.6版本起)。当在SQL提供程序注解(例如@SelectProvider)的type(或value)属性被省略时,该类适用于type(或value)属性。 | A type alias or fully qualified class name | Not set |
nullableOnForEach | 指定 ?foreach ?标签上 ?nullable ?属性的默认值。(自3.5.9版本起可用) | true | false | false |
argNameBasedConstructorAutoMapping | 在应用构造函数自动映射时,使用参数名称来搜索要映射的列,而不是依赖于列的顺序。(自3.5.10版本起可用) | true | false | false |
一个完全配置的settings元素的示例如下:
<settings>
<setting name="cacheEnabled" value="true"/>
<setting name="lazyLoadingEnabled" value="true"/>
<setting name="aggressiveLazyLoading" 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="safeResultHandlerEnabled" value="true"/>
<setting name="mapUnderscoreToCamelCase" value="false"/>
<setting name="localCacheScope" value="SESSION"/>
<setting name="jdbcTypeForNull" value="OTHER"/>
<setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/>
<setting name="defaultScriptingLanguage" value="org.apache.ibatis.scripting.xmltags.XMLLanguageDriver"/>
<setting name="defaultEnumTypeHandler" value="org.apache.ibatis.type.EnumTypeHandler"/>
<setting name="callSettersOnNulls" value="false"/>
<setting name="returnInstanceForEmptyRow" value="false"/>
<setting name="logPrefix" value="exampleLogPreFix_"/>
<setting name="logImpl" value="SLF4J | LOG4J | LOG4J2 | JDK_LOGGING | COMMONS_LOGGING | STDOUT_LOGGING | NO_LOGGING"/>
<setting name="proxyFactory" value="CGLIB | JAVASSIST"/>
<setting name="vfsImpl" value="org.mybatis.example.YourselfVfsImpl"/>
<setting name="useActualParamName" value="true"/>
<setting name="configurationFactory" value="org.mybatis.example.ConfigurationFactory"/>
</settings>
?