全部学科
NodeJS全栈
nodejs
Python全栈
python
小程序首页
📅 2026-05-20 8 分钟 ✍️ juanwangdev

settings 全局设置

settings 是 MyBatis 中最复杂的配置之一,用于调整框架的运行时行为。了解每个参数的作用,可以在性能和功能之间做出合适的选择。

settings 基本结构

XML
<configuration>
    <settings>
        <setting name="cacheEnabled" value="true"/>
        <setting name="lazyLoadingEnabled" value="true"/>
        <!-- 更多设置 -->
    </settings>
</configuration>

注意:settings 元素必须出现在 configurationproperties 之后、typeAliases 之前。

缓存相关设置

cacheEnabled

参数默认值说明
cacheEnabledtrue全局开启或关闭所有映射器中配置的二级缓存
XML
<setting name="cacheEnabled" value="true"/>

关闭二级缓存:

XML
<setting name="cacheEnabled" value="false"/>

注意:此设置仅影响二级缓存(Mapper 级别),一级缓存(SqlSession 级别)始终开启。关闭二级缓存适用于对数据实时性要求极高的场景。

localCacheScope

参数默认值说明
localCacheScopeSESSION一级缓存作用域,可选 SESSION/STATEMENT
XML
<!-- 默认:同一 SqlSession 内共享一级缓存 -->
<setting name="localCacheScope" value="SESSION"/>

<!-- 每次 SQL 执行后清空一级缓存 -->
<setting name="localCacheScope" value="STATEMENT"/>
说明适用场景
SESSION同一 SqlSession 内的查询共享缓存默认值,适合大多数场景
STATEMENT每次 SQL 执行后清空缓存需要实时读取外部数据变更的场景

懒加载相关设置

lazyLoadingEnabled

参数默认值说明
lazyLoadingEnabledfalse全局开启或关闭延迟加载
XML
<setting name="lazyLoadingEnabled" value="true"/>

aggressiveLazyLoading

参数默认值说明
aggressiveLazyLoadingfalseagresive 懒加载开关
XML
<!-- 关闭:只有在调用懒加载属性的方法时才加载 -->
<setting name="aggressiveLazyLoading" value="false"/>
说明
true调用对象的任何方法都会触发懒加载
false仅调用懒加载属性自身的方法时才触发加载

lazyLoadTriggerMethods

参数默认值说明
lazyLoadTriggerMethodsequals,clone,hashCode,toString触发懒加载的方法列表
XML
<setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/>

映射相关设置

mapUnderscoreToCamelCase

参数默认值说明
mapUnderscoreToCamelCasefalse是否开启数据库下划线字段到 Java 驼峰字段的自动映射
XML
<setting name="mapUnderscoreToCamelCase" value="true"/>

开启后,数据库字段 user_name 会自动映射到 Java 字段 userName

推荐:现代项目中基本都应开启此设置,避免编写冗余的 resultMap。

autoMappingBehavior

参数默认值说明
autoMappingBehaviorPARTIAL自动映射策略
XML
<setting name="autoMappingBehavior" value="PARTIAL"/>
说明
NONE禁用自动映射
PARTIAL默认,自动映射没有嵌套 resultMap 的列
FULL自动映射所有列,包括嵌套 resultMap

autoMappingUnknownColumnBehavior

参数默认值说明
autoMappingUnknownColumnBehaviorNONE发现未映射列时的行为
说明
NONE不处理(默认)
WARNING输出警告日志
FAILING抛出异常
XML
<!-- 开发阶段推荐设置为 WARNING,及时发现字段不匹配问题 -->
<setting name="autoMappingUnknownColumnBehavior" value="WARNING"/>

日志相关设置

logImpl

参数默认值说明
logImpl自动检测指定 MyBatis 使用的日志实现
XML
<!-- 使用 SLF4J 日志 -->
<setting name="logImpl" value="SLF4J"/>

<!-- 使用 Log4j2 -->
<setting name="logImpl" value="LOG4J2"/>

<!-- 使用 StdOut(控制台输出,仅开发调试用) -->
<setting name="logImpl" value="STDOUT_LOGGING"/>
日志实现说明
SLF4J推荐,配合 Logback/Log4j2 使用
LOG4J2直接使用 Log4j2
JDK_LOGGINGJDK 内置日志
STDOUT_LOGGING标准输出,仅调试
NO_LOGGING禁用日志

logPrefix

参数默认值说明
logPrefix日志输出前缀
XML
<setting name="logPrefix" value="[MyBatis]"/>

其他常用设置

defaultExecutorType

参数默认值说明
defaultExecutorTypeSIMPLE默认执行器类型
XML
<setting name="defaultExecutorType" value="SIMPLE"/>
执行器类型说明
SIMPLE默认,每次执行创建新预处理语句
REUSE复用预处理语句
BATCH批量执行模式,适合批量操作

defaultStatementTimeout

参数默认值说明
defaultStatementTimeoutnull(无限制)SQL 执行超时时间(秒)
XML
<!-- 设置 30 秒超时 -->
<setting name="defaultStatementTimeout" value="30"/>

推荐:生产环境务必设置超时时间,防止慢 SQL 拖垮连接池。

defaultFetchSize

参数默认值说明
defaultFetchSizenull结果集抓取行数提示
XML
<!-- 每次从数据库拉取 100 行 -->
<setting name="defaultFetchSize" value="100"/>

适用场景:查询大量数据时,设置合理的 fetchSize 可以减少内存消耗。

useGeneratedKeys

参数默认值说明
useGeneratedKeysfalse全局开启 JDBC getGeneratedKeys 获取自增主键
XML
<setting name="useGeneratedKeys" value="true"/>

开启后,INSERT 语句可以自动回填自增主键到实体对象中。

useColumnLabel

参数默认值说明
useColumnLabeltrue使用列标签代替列名
XML
<setting name="useColumnLabel" value="true"/>

保持默认值即可,不同数据库驱动对列名和列标签的支持有差异。

safeRowBoundsEnabled

参数默认值说明
safeRowBoundsEnabledfalse是否在嵌套语句中使用 RowBounds
XML
<setting name="safeRowBoundsEnabled" value="false"/>

safeResultHandlerEnabled

参数默认值说明
safeResultHandlerEnabledtrue是否在嵌套语句中使用 ResultHandler
XML
<setting name="safeResultHandlerEnabled" value="true"/>

完整配置示例

XML
<settings>
    <!-- 缓存 -->
    <setting name="cacheEnabled" value="true"/>
    <setting name="localCacheScope" value="SESSION"/>

    <!-- 懒加载 -->
    <setting name="lazyLoadingEnabled" value="false"/>
    <setting name="aggressiveLazyLoading" value="false"/>

    <!-- 映射 -->
    <setting name="mapUnderscoreToCamelCase" value="true"/>
    <setting name="autoMappingBehavior" value="PARTIAL"/>
    <setting name="autoMappingUnknownColumnBehavior" value="WARNING"/>

    <!-- 日志 -->
    <setting name="logImpl" value="SLF4J"/>

    <!-- 执行器 -->
    <setting name="defaultExecutorType" value="SIMPLE"/>
    <setting name="defaultStatementTimeout" value="30"/>
    <setting name="defaultFetchSize" value="100"/>

    <!-- 其他 -->
    <setting name="useGeneratedKeys" value="true"/>
    <setting name="useColumnLabel" value="true"/>
</settings>

要点总结

  • cacheEnabled 控制二级缓存开关,一级缓存始终开启
  • lazyLoadingEnabled 控制懒加载,配合 aggressiveLazyLoading 实现按需加载
  • mapUnderscoreToCamelCase 实现下划线到驼峰的自动映射,推荐开启
  • logImpl 指定日志实现,生产推荐 SLF4J + Logback/Log4j2
  • defaultStatementTimeout 设置 SQL 超时,生产环境必须配置
  • useGeneratedKeys 开启后可自动回填自增主键

📝 发现内容有误?点击此处直接编辑

← 上一篇 properties 属性文件
下一篇 → typeAliases 类型别名
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库