Mybatis配置-设置(settings)

发布时间:2023年12月17日
 

这些是非常重要的调整,它们修改了MyBatis在运行时的行为方式。下表描述了这些设置以及它们的含义和默认值。

SettingDescriptionValid ValuesDefault
cacheEnabled全局启用或禁用配置在此配置下的任何mapper中的所有缓存。true | falsetrue
lazyLoadingEnabled全局启用或禁用延迟加载。当启用时,所有关联将进行延迟加载。可以通过在特定关联上使用fetchType属性来覆盖此值。true | falsefalse
aggressiveLazyLoading当启用时,任何方法调用将加载对象的所有延迟属性。否则,每个属性将按需加载(参见lazyLoadTriggerMethods)。true | falsefalse (true in ≤3.4.1)
multipleResultSetsEnabled允许或禁止从单个语句中返回多个结果集(需要兼容的驱动程序)。true | falsetrue
useColumnLabel使用列标签而不是列名。不同的驱动程序在这方面的行为可能会有所不同。请参考驱动程序的文档,或者测试两种模式以确定您的驱动程序的行为方式。true | falsetrue
useGeneratedKeys允许对生成的键提供JDBC支持。需要一个兼容的驱动程序。如果设置为true,此设置将强制使用生成的键,因为某些驱动程序拒绝兼容性但仍然能正常工作(例如Derby驱动程序)。true | falseFalse
autoMappingBehavior
 

指定MyBatis是否以及如何自动将列映射到字段/属性。NONE禁用自动映射。PARTIAL只会自动映射未定义内部嵌套结果映射的结果。FULL将自动映射任何复杂性的结果映射(包含嵌套或其他情况)。

  • NONE:禁用自动映射
  • PARTIAL:只自动映射未定义内部嵌套结果映射的结果
  • FULL:自动映射任何复杂性的结果映射(包含嵌套或其他情况)
NONE, PARTIAL, FULLPARTIAL
autoMappingUnknownColumnBehavior
 

当自动映射目标检测到未知列(或未知属性类型)时,指定其行为。

  • NONE:不做任何操作。
  • WARNING:输出警告日志('org.apache.ibatis.session.AutoMappingUnknownColumnBehavior' 的日志级别必须设置为WARN)。
  • FAILING:映射失败(抛出SqlSessionException异常)。

请注意,当autoMappingBehavior设置为FULL时,可能会出现误报。

NONE, WARNING, FAILINGNONE
defaultExecutorType
 

配置默认的执行器(Executor)。

  • SIMPLE:执行器不做任何特殊操作。
  • REUSE:执行器重用预编译语句(prepared statements)。
  • BATCH:执行器重用语句并批量更新。

根据需求选择适合的执行器配置。

SIMPLE REUSE BATCHSIMPLE
defaultStatementTimeout设置驱动程序等待数据库响应的时间,单位为秒。Any positive integerNot Set (null)
defaultFetchSize为驱动程序设置一个提示,以控制返回结果的提取大小。这个参数的值可以被查询的设置所覆盖。Any positive integerNot 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 | falseFalse
safeResultHandlerEnabled允许在嵌套语句上使用ResultHandler。如果允许,请将其设置为false。true | falseTrue
mapUnderscoreToCamelCase启用从经典数据库列名A_COLUMN到驼峰式经典Java属性名aColumn的自动映射。true | falseFalse
localCacheScopeMyBatis使用本地缓存来防止循环引用并加快重复嵌套查询的速度。默认情况下(SESSION),在一个会话期间执行的所有查询都会被缓存起来。如果设置localCacheScope为STATEMENT,则本地会话仅用于语句执行,同一个SqlSession的两次不同调用之间的数据不会被共享。SESSION | STATEMENTSESSION
jdbcTypeForNull在未为参数指定特定的JDBC类型时,指定null值的JDBC类型。有些驱动程序需要指定列的JDBC类型,而其他驱动程序可以使用通用的值,如NULL、VARCHAR或OTHER。JdbcType enumeration. Most common are: NULL, VARCHAR and OTHEROTHER
lazyLoadTriggerMethods指定哪些对象的方法触发延迟加载。A method name list separated by commasequals,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 | falsefalse
returnInstanceForEmptyRowMyBatis默认情况下,在返回的行的所有列都为NULL时,返回null。当启用此设置时,MyBatis将返回一个空实例。请注意,这也适用于嵌套结果(例如集合和关联)。自3.4.2版本起可用。true | falsefalse
logPrefix指定MyBatis将添加到日志记录器名称前面的前缀字符串。Any StringNot set
logImpl指定MyBatis应使用哪个日志实现。如果未设置此选项,则将自动发现日志实现。SLF4J | LOG4J(deprecated since 3.5.9) | LOG4J2 | JDK_LOGGING | COMMONS_LOGGING | STDOUT_LOGGING | NO_LOGGINGNot set
proxyFactory指定MyBatis将使用的代理工具来创建支持延迟加载的对象。CGLIB (deprecated since 3.5.10) | JAVASSISTJAVASSIST (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 | falsetrue
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 | falsefalse
defaultSqlProviderType指定一个SQL提供程序类,该类包含提供程序方法(自3.5.6版本起)。当在SQL提供程序注解(例如@SelectProvider)的type(或value)属性被省略时,该类适用于type(或value)属性。A type alias or fully qualified class nameNot set
nullableOnForEach指定 ?foreach?标签上 ?nullable?属性的默认值。(自3.5.9版本起可用)true | falsefalse
argNameBasedConstructorAutoMapping在应用构造函数自动映射时,使用参数名称来搜索要映射的列,而不是依赖于列的顺序。(自3.5.10版本起可用)true | falsefalse

一个完全配置的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>

?

文章来源:https://blog.csdn.net/hay23455/article/details/135011854
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。