Mybatis配置文件(mybatis-config.xml )源码分析
来源:互联网 发布:淘宝哪家supreme复刻 编辑:程序博客网 时间:2024/05/22 17:22
Mybatis配置文件(mybatis-config.xml )是我们在使用Mybatis的过程中必须掌握的基础配置文件,这个配置文件中我们经常会配置如下标签。
settings
<settings> <!-- 这个配置使全局的映射器启用或禁用缓存 --> <setting name="cacheEnabled" value="false"/> <!-- 全局启用或禁用延迟加载。当禁用时,所有关联对象都会即时加载 --> <setting name="lazyLoadingEnabled" value="true"/> <!-- 当启用时,有延迟加载属性的对象在被调用时将会完全加载任意属性。否则,每种属性将会按需要加载 --> <setting name="aggressiveLazyLoading" value="true"/> <!-- 允许或不允许多种结果集从一个单独的语句中返回(需要适合的驱动) --> <setting name="multipleResultSetsEnabled" value="true"/> <!-- 使用列标签代替列名。不同的驱动在这方便表现不同。参考驱动文档或充分测试两种方法来决定所使用的驱动 --> <setting name="useColumnLabel" value="true"/> <!-- 允许JDBC支持生成的键。需要适合的驱动。如果设置为true则这个设置强制生成的键被使用,尽管一些驱动拒绝兼容但仍然有效(比如Derby) --> <setting name="useGeneratedKeys" value="true"/> <!-- 指定MyBatis如何自动映射列到字段/属性。PARTIAL只会自动映射简单,没有嵌套的结果。FULL会自动映射任意复杂的结果(嵌套的或其他情况) --> <setting name="autoMappingBehavior" value="PARTIAL"/> <!-- 配置默认的执行器。SIMPLE执行器没有什么特别之处。REUSE执行器重用预处理语句。BATCH执行器重用语句和批量更新 --> <setting name="defaultExecutorType" value="REUSE"/> <!-- 设置超时时间,它决定驱动等待一个数据库响应的时间 --> <setting name="defaultStatementTimeout" value="600"/></settings>
settings 标签的Java解析过程
settings标签的Java解析过程,我们可以查看mybatis的源代码:XMLConfigBuilder#parseConfiguration方法,上面已经对settings标签的属性做了注释,我们在通过源码的分析会进一步了解这些属性的作用。
private void parseConfiguration(XNode root) { try { Properties settings = settingsAsPropertiess(root.evalNode("settings")); //issue #117 read properties first propertiesElement(root.evalNode("properties")); loadCustomVfs(settings); typeAliasesElement(root.evalNode("typeAliases")); pluginElement(root.evalNode("plugins")); objectFactoryElement(root.evalNode("objectFactory")); objectWrapperFactoryElement(root.evalNode("objectWrapperFactory")); reflectionFactoryElement(root.evalNode("reflectionFactory")); settingsElement(settings); // read it after objectFactory and objectWrapperFactory issue #631 environmentsElement(root.evalNode("environments")); databaseIdProviderElement(root.evalNode("databaseIdProvider")); typeHandlerElement(root.evalNode("typeHandlers")); mapperElement(root.evalNode("mappers")); } catch (Exception e) { throw new BuilderException("Error parsing SQL Mapper Configuration. Cause: " + e, e); }}
以上的方法不仅解析了 mybatis-config.xml 中的settings标签,同时也解析了这个配置文件中包含的其他的标签,以上方法是Mybatis解析配置文件的核心处理方法,对于每一个标签的作用我们后面再源码分析的过程中逐渐进行介绍。
setting各个属性的默认值
重点可以关注:XMLConfigBuilder#settingsElement(settings) 方法的实现,我们就能明白在settings里面的每个属性的默认值是什么了。
private void settingsElement(Properties props) throws Exception { configuration.setAutoMappingBehavior(AutoMappingBehavior.valueOf(props.getProperty("autoMappingBehavior", "PARTIAL"))); configuration.setCacheEnabled(booleanValueOf(props.getProperty("cacheEnabled"), true)); configuration.setProxyFactory((ProxyFactory) createInstance(props.getProperty("proxyFactory"))); configuration.setLazyLoadingEnabled(booleanValueOf(props.getProperty("lazyLoadingEnabled"), false)); configuration.setAggressiveLazyLoading(booleanValueOf(props.getProperty("aggressiveLazyLoading"), true)); configuration.setMultipleResultSetsEnabled(booleanValueOf(props.getProperty("multipleResultSetsEnabled"), true)); configuration.setUseColumnLabel(booleanValueOf(props.getProperty("useColumnLabel"), true)); configuration.setUseGeneratedKeys(booleanValueOf(props.getProperty("useGeneratedKeys"), false)); configuration.setDefaultExecutorType(ExecutorType.valueOf(props.getProperty("defaultExecutorType", "SIMPLE"))); configuration.setDefaultStatementTimeout(integerValueOf(props.getProperty("defaultStatementTimeout"), null)); configuration.setDefaultFetchSize(integerValueOf(props.getProperty("defaultFetchSize"), null)); configuration.setMapUnderscoreToCamelCase(booleanValueOf(props.getProperty("mapUnderscoreToCamelCase"), false)); configuration.setSafeRowBoundsEnabled(booleanValueOf(props.getProperty("safeRowBoundsEnabled"), false)); configuration.setLocalCacheScope(LocalCacheScope.valueOf(props.getProperty("localCacheScope", "SESSION"))); configuration.setJdbcTypeForNull(JdbcType.valueOf(props.getProperty("jdbcTypeForNull", "OTHER"))); configuration.setLazyLoadTriggerMethods(stringSetValueOf(props.getProperty("lazyLoadTriggerMethods"), "equals,clone,hashCode,toString")); configuration.setSafeResultHandlerEnabled(booleanValueOf(props.getProperty("safeResultHandlerEnabled"), true)); configuration.setDefaultScriptingLanguage(resolveClass(props.getProperty("defaultScriptingLanguage"))); configuration.setCallSettersOnNulls(booleanValueOf(props.getProperty("callSettersOnNulls"), false)); configuration.setLogPrefix(props.getProperty("logPrefix")); configuration.setLogImpl(resolveClass(props.getProperty("logImpl"))); configuration.setConfigurationFactory(resolveClass(props.getProperty("configurationFactory")));}
0 0
- Mybatis配置文件(mybatis-config.xml )源码分析
- mybatis-config.xml配置文件
- mybatis-config.xml配置文件
- mybatis学习总结-核心配置文件mybatis-config.xml(一)
- mybatis学习总结-核心配置文件mybatis-config.xml(一)
- mybatis学习总结-核心配置文件mybatis-config.xml(二)
- mybatis学习总结-核心配置文件mybatis-config.xml(一)
- mybatis学习总结-核心配置文件mybatis-config.xml(二)
- mybatis学习总结-核心配置文件mybatis-config.xml(一)
- mybatis学习(二)-- mybatis-config.xml配置文件详解
- mybatis的mybatis-config.xml配置文件详解
- mybatis核心配置文件mybatis-config.xml
- mybatis源码学习之执行过程分析(2)——config.xml配置文件和mapper.xml映射文件解析过程
- mybatis-Config.xml全局配置文件解析
- 客户关系系统CRM配置文件mybatis-config.xml
- 用好Mybatis系列之了解Mybatis-config.xml配置文件
- mybatis-全局配置文件-mybatis-config.xml-properties-3
- mybatis-全局配置文件-mybatis-config.xml-settings-4
- JS显示图片轮播控件(带图片角标)
- 29. Divide Two Integers
- GSON方式生成和解析json数据
- 新建项目,Android模拟器报错:Could not initialize OpenglES emulation, use ‘-gpu off’ to disable it.
- Android Common Layout 和 Adapter Layout 简单介绍(及ListView的简单使用)(一)
- Mybatis配置文件(mybatis-config.xml )源码分析
- 小回顾-构建Java程序
- 11. Container With Most Water
- .Net语言 APP开发平台——Smobiler学习日志:如何在手机上实现表单设计
- Tsung笔记之IP地址和端口限制突破篇
- HDU5877 Weak Pair(树状数组+dfs)
- hdu1078 FatMouse and Cheese 搜索dfs&dp
- stm32 usart在DMA模式下只能发送一次
- TCP和UDP的区别