MyBatis 的 <settings>是一个极其重要的标签调整,我们可以通过这个标签修改 MyBatis 在运行时的行为方式。该标签 DTD 定义如下:
<!ELEMENT settings (setting+)> <!ELEMENT setting EMPTY> <!ATTLIST setting name CDATA #REQUIRED value CDATA #REQUIRED >
其中,<settings> 至少需要一个以上的 <setting> 标签,<setting> 标签用来设置一个 key-value,其中内容为空,只有两个属性,分别如下:
name:指定设置项的名称,如:cacheEnabled
value:指定设置项的值,如:true 或 false
下面这个表格描述了可以设置的信息:
设置参数 | 描述 | 有效值 | 默认值 |
cacheEnabled | 这个配置使全局的映射器启用或禁用缓存 | true | false | true |
lazyLoadingEnabled | 全局启用或禁用延迟加载。当禁用时,所有关联对象都会即时加载。 | true | false | true |
aggressiveLazyLoading | 当启用时,有延迟加载属性的对象在被调用时将会完全加载任意属性。否则,每种属性将会按需要加载。 | true | false | true |
multipleResultSetsEnabled | 允许或不允许多种结果集从一个单独的语句中返回(需要适合的驱动)。 | true | false | true |
useColumnLabel | 使用列标签代替列名。不同的驱动在这方便表现不同。参考驱动文档或充分测试两种方法来决定所使用的驱动。 | true | false | true |
useGeneratedKeys | 允许 JDBC 支持生成的键。需要适合的驱动。如果设置为 true 则这个设置强制生成的键被使用,尽管一些驱动拒绝兼容但仍然有效(比如 Derby)。 | true | false | false |
autoMappingBehavior | 指定 MyBatis 如何自动映射列到字段/属性。PARTIAL 只会自动映射简单,没有嵌套的结果。FULL 会自动映射任意复杂的结果(嵌套的或其他情况)。 | NONE, PARTIAL, FULL | PARTIAL |
defaultExecutorType | 配置默认的执行器。SIMPLE 执行器没有什么特别之处。REUSE 执行器重用预处理语句。BATCH 执行器重用语句和批量更新 | SIMPLE, REUSE, BATCH | SIMPLE |
defaultStatementTimeout | 设置超时时间,它决定驱动等待一个数据库响应的时间。 | Any positive integer | Not Set (null) |
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <!-- 配置MyBatis在运行时的行为方式。如:启用缓存等 --> <settings> <!-- 配置使全局的映射器启用或禁用缓存,true-启用;false-禁用;默认:true --> <setting name="cacheEnabled" value="true" /> <!-- 全局启用或禁用延迟加载。当禁用时,所有关联对象都会即时加载。(true|false) 默认:true --> <setting name="lazyLoadingEnabled" value="true" /> <!-- 当启用时,有延迟加载属性的对象在被调用时将会完全加载任意属性。否则,每种属性将会按需要加载。(true|false) 默认:true --> <setting name="aggressiveLazyLoading" value="true"/> <!-- 允许或不允许多种结果集从一个单独 的语句中返回(需要适合的驱动)(true|false)默认:true --> <setting name="multipleResultSetsEnabled" value="true"/> <!-- 使用列标签代替列名。不同的驱动在这 方便表现不同。 参考驱动文档或充分测试两种方法来决定所使用的驱动。true|false 默认:true --> <setting name="useColumnLabel" value="true"/> <!-- 允许 JDBC支持生成的键。 需要适合的驱动。 如果设置为true则这个设置强制 生成的键被使用 ,-尽管一些驱动拒绝兼容但仍然有效(比如Derby)true|false 默认:False --> <setting name="useGeneratedKeys" value="false" /> <!-- 指定 MyBatis如何自动映射列到字段/属性。PARTIAL只NONE,PARTIAL,FULL会自动映射简单 ,没有嵌套的结果。FULL会自动映射任意复杂的结果(嵌套的或其他情况)。默认:PARTIAL --> <setting name="autoMappingBehavior" value="PARTIAL"/> <!-- 配置默认的执行器。SIMPLE执行器没有什么特别之处。REUSE执行器重用预处理语句。 BATCH执行器重用语句和批量更新。默认:SIMPLE --> <setting name="defaultExecutorType" value="SIMPLE"/> <!-- 设置超时时间, 它决定驱动等待一个数据库响应的时间。 Any positive integer Not Set (null) --> <setting name="defaultStatementTimeout" value="1000"/> <!-- 允许在嵌套语句上使用RowBounds。true|false 默认:False --> <setting name="safeRowBoundsEnabled" value="false"/> <!-- 启用可以自动从数据库中根据列名生成驼峰式的变量名。 -如:A_COLUMN -> aColumn。true|false 默认:False --> <setting name="mapUnderscoreToCamelCase" value="false"/> <!-- MyBatis使用本地缓存以防止循环引用和加快重复嵌套查询。 -默认(SESSION)在会话中执行的所有查询缓存。SESSION|STATEMENT --> <setting name="localCacheScope" value="SESSION"/> </settings> <!-- 忽略其他配置 --> </configuration>