Mybatis加载时序图

元数据读取、配置流程:

XMLConfigBuilder XPathParser Configuration MapperRegistry MapperAnnot XMLMapperBuilder MapperBuild ResultMapResolver XMLStatem XMLInclude PropertyParser VariableTo GenericTokenParser XMLScriptBuilder TextSqlNode DynamicCheck MixedSqlNode DynamicSqlSource SelectKeyGenerator XMLLanguageDriver 实例化Configuration,保存上下文公共配置 实例化,创建DOC文档 propertiesElement(root.evalNode("properties")) typeAliasesElement(root.evalNode("typeAliases")) pluginElement(root.evalNode("plugins")) objectFactoryElement(root.evalNode("objectFactory")) objectWrapperFactoryElement(root.evalNode("objectWrapperFactory")) settingsElement(root.evalNode("settings")) environmentsElement(root.evalNode("environments")) databaseIdProviderElement(root.evalNode("databaseIdProvider")) typeHandlerElement(root.evalNode("typeHandlers")) mapperElement(root.evalNode("mappers")) addMappers添加扫描包 addMappers映射注册机 为mapper接口创建代理类MapperProxyFactory,存放在MapperRegistry中 Mapper接口注释解析 loadXmlResource加载当前mapper下的xml parse委托XMLMapperBuilder来解析XML 实例化助手类 parse方法开始解析 configurationElement cacheRefElement: 配置cache-ref cacheElement: 使用缓存 useNewCache: 构建Cache,放入上下文 parameterMapElement: 配置parameterMap buildParameterMapping: 构建参数映射 addParameterMap构建Map并放入上下文 resultMapElement配置resultMap buildResultMapping构建Mapping映射 实例化,包装ResultMapping参数列表 addResultMap构建Map并放入上下文 sqlElement配置SQL buildStatementFromContext根据上下文内容构建语句 实例化XMLStatementBuilder,后续由它解析 parseStatementNode解析所有语法标签、参数 getLanguageDriver获取语言启动,默认为XMLLanguageDriver,在Configuration构造方法中配置的 实例化,处理include标签 applyIncludes应用include标签 findSqlFragment从上下文拿去SQL片段 parse对SQL片段进行格式化 实例化,用来处理变量 new GenericTokenParser("${", "}", handler) 处理$占位符 parse,注意这里没有进行替换操作 然后进行DOM节点操作将SQL拼装在一起 processSelectKeyNodes解析SelectKey节点 addMappedStatement构建SQL语法,默认key为NoKeyGenerator 实例化脚本解析器 parseScriptNode解析SQL parseDynamicTags检查是否是动态SQL isDynamic方法来检测 实例化,这个很有意思,它的handleToken固定为true,永远是动态SQL new GenericTokenParser("${", "}", handler) 处理$占位符 返回动态SQL的节点信息 包装动态节点为混合节点 将混合节点和上下文配置包装在一起 addMappedStatement将当前标签的key、参数映射、结果映射包装到MappedStatement中并放入上下文 MappedStatement包装到SelectKeyGenerator放入上下文 创建DynamicSqlSource/RawSqlSource,并用助手类放入上下文 parseCache解析注解CacheNamespace、parseCacheRef析注解CacheNamespaceRef parseStatement解析注解 buildSqlSourceFromStrings构建SQL createSqlSource创建SQL资源DynamicSqlSource/RawSqlSource,有$为动态, addMappedStatement保存到上下文 XMLConfigBuilder XPathParser Configuration MapperRegistry MapperAnnot XMLMapperBuilder MapperBuild ResultMapResolver XMLStatem XMLInclude PropertyParser VariableTo GenericTokenParser XMLScriptBuilder TextSqlNode DynamicCheck MixedSqlNode DynamicSqlSource SelectKeyGenerator XMLLanguageDriver
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值