接下来先全局的说一下MyBatis的mybatis-config的settings属性说明。
configuration 的映射文件(根据定义顺序说明)
- properties 属性
- settings 设置
- typeAliases 类型别名
- typeHandlers 类型处理器
- objectFactory 对象工厂
- objectWrapperFactory MyBatis对基本类型, 基本对象map和集合的封装.
- reflectorFactory 反射模块工厂
- plugins 插件
- environments 环境配置
- databaseIdProvider 数据库厂商标识
- mappers 映射器
settings 设置 (根据XMLConfigBuilder 配置顺序)
这个是MyBatis的重要配置之一, 而且还会改变它在运行过程中如何处理的行为,可以通过org.apache.ibatis.builder.xml.XMLConfigBuilder 查看, settings的参数如下:
本次实例中的代码都是最终的默认属性配置。 不是默认的我会截图给出效果。
autoMappingBehavior 默认值为: PARTIAL
指定 MyBatis 应如何自动映射列到字段或属性。NONE 表示取消自动映射;PARTIAL 只会自动映射没有定义嵌套结果集映射的结果集。 FULL 会自动映射任意复杂的结果集(无论是否嵌套)。
autoMappingUnknownColumnBehavior 默认值:NONE
指定发现自动映射目标未知列(或者未知属性类型)的行为。
- NONE: 不做任何反应
- WARNING: 输出提醒日志 ('org.apache.ibatis.session.AutoMappingUnknownColumnBehavior' 的日志等级必须设置为 WARN)
- FAILING: 映射失败 (抛出 SqlSessionException)
等于NONE的时候, 如果存在不存在的列, 会直接输出存在的不存在的会直接忽略掉。
等于WARNING的时候,其中里面的test列示不存在的, 通过sql构建出来的。 会如下的提示:
等于FAILING的时候, 会如下的提示:
所以,你可以根据你自己的需求情况填写对应的格式类型。
cacheEnabled 默认值: true
全局地开启或关闭配置文件中的所有映射器已经配置的任何缓存。就只有两个值, 一般情况下就是用默认值。
proxyFactory 默认值: JAVASSIST (MyBatis 3.3 以上)
指定 Mybatis 创建具有延迟加载能力的对象所用到的代理工具。包含: CGLIB | JAVASSIST
lazyLoadingEnabled 默认值: false
延迟加载的全局开关。当开启时,所有关联对象都会延迟加载。 特定关联关系中可通过设置 fetchType 属性来覆盖该项的开关状态。
aggressiveLazyLoading 默认值:false (在 3.4.1 及之前的版本默认值为 true)
当开启时,任何方法的调用都会加载该对象的所有属性。 否则,每个属性会按需加载(参考 lazyLoadTriggerMethods)。
multipleResultSetsEnabled 默认值: true
是否允许单一语句返回多结果集(需要驱动支持)。
useColumnLabel 默认值: true
使用列标签代替列名。不同的驱动在这方面会有不同的表现,具体可参考相关驱动文档或通过测试这两种不同的模式来观察所用驱动的结果。
useGeneratedKeys 默认值: false
允许 JDBC 支持自动生成主键,需要驱动支持。 如果设置为 true 则这个设置强制使用自动生成主键,尽管一些驱动不能支持但仍可正常工作(比如 Derby)。
defaultExecutorType 默认值: SIMPLE
配置默认的执行器。SIMPLE 就是普通的执行器;REUSE 执行器会重用预处理语句(prepared statements); BATCH 执行器将重用语句并执行批量更新。
defaultStatementTimeout 默认值: 未设置 (null)
设置超时时间,它决定驱动等待数据库响应的秒数。 单位任意正整数。
defaultFetchSize 默认值: 未设置 (null)
为驱动的结果集获取数量(fetchSize)设置一个提示值。此参数只可以在查询设置中被覆盖。单位任意正整数。
defaultResultSetType 默认为: 未设置。
根据语句设置忽略每条statement设置。参数包含: FORWARD_ONLY | SCROLL_SENSITIVE | SCROLL_INSENSITIVE | DEFAULT(same behavior with 'Not Set')
mapUnderscoreToCamelCase 默认值: false
是否开启自动驼峰命名规则(camel case)映射,即从经典数据库列名 A_COLUMN 到经典 Java 属性名 aColumn 的类似映射。
safeRowBoundsEnabled 默认值: false
允许在嵌套语句中使用分页(RowBounds)。如果允许使用则设置为 false。
localCacheScope 默认值:SESSION
MyBatis 利用本地缓存机制(Local Cache)防止循环引用(circular references)和加速重复嵌套查询。 默认值为 SESSION,这种情况下会缓存一个会话中执行的所有查询。 若设置值为 STATEMENT,本地会话仅用在语句执行上,对相同 SqlSession 的不同调用将不会共享数据。
jdbcTypeForNull 默认值: OTHER
当没有为参数提供特定的 JDBC 类型时,为空值指定 JDBC 类型。 某些驱动需要指定列的 JDBC 类型,多数情况直接用一般类型即可,比如 NULL、VARCHAR 或 OTHER。
lazyLoadTriggerMethods 参数: equals,clone,hashCode,toString
指定哪个对象的方法触发一次延迟加载。用逗号分隔的方法列表。
safeResultHandlerEnabled 默认值: true
允许在嵌套语句中使用分页(ResultHandler)。如果允许使用则设置为 false。
defaultScriptingLanguage
指定动态 SQL 生成的默认语言。 一个类型别名或完全限定类名。类路径为: org.apache.ibatis.scripting.xmltags.XMLLanguageDriver
defaultEnumTypeHandler
指定 Enum 使用的默认 TypeHandler 。(新增于 3.4.5) 一个类型别名或完全限定类名。 类路径为: org.apache.ibatis.type.EnumTypeHandler
callSettersOnNulls 默认值: false
指定当结果集中值为 null 的时候是否调用映射对象的 setter(map 对象时为 put)方法,这在依赖于 Map.keySet() 或 null 值初始化的时候比较有用。注意基本类型(int、boolean 等)是不能设置成 null 的。
useActualParamName 默认值: true
允许使用方法签名中的名称作为语句参数名称。 为了使用该特性,你的项目必须采用 Java 8 编译,并且加上 -parameters 选项。(新增于 3.4.1)
returnInstanceForEmptyRow 默认值: false
当返回行的所有列都是空时,MyBatis默认返回 null。 当开启这个设置时,MyBatis会返回一个空实例。 请注意,它也适用于嵌套的结果集 (如集合或关联)。(新增于 3.4.2)
logPrefix 默认值: 未设置
指定 MyBatis 增加到日志名称的前缀。参数为: 任意字符串。
configurationFactory 默认值: 未设置
指定一个提供 Configuration 实例的类。 这个被返回的 Configuration 实例用来加载被反序列化对象的延迟加载属性值。 这个类必须包含一个签名为static Configuration getConfiguration() 的方法。(新增于 3.2.3) 类名或者全类名。
一个完整的案例示例, 代码如下:
上面的很多实例, 现在进行深入分析有点过早, 很多知识点没有办法延申, 后续在具体用到的时候, 会深入具体说明使用场景。
很多的MyBatis的settings设置, 都是官方给定了默认的实现, 而且能够适用大多数的场景。 后续会说明如何自定义实现的方式。
感谢阅读, 关注我查看更多更全的文章。
全部代码已经上传到Github
GitHub地址: https://github.com/xymiao/mybatis3
本篇代码地址: https://github.com/xymiao/mybatis3/tree/master/mybatis3_04_mybatis_config_settings