Mybatis 時序圖

元數據讀取、配置流程:

XMLConfigBuilderXPathParserConfigurationMapperRegistryMapperAnnotXMLMapperBuilderMapperBuildResultMapResolverXMLStatemXMLIncludePropertyParserVariableToGenericTokenParserXMLScriptBuilderTextSqlNodeDynamicCheckMixedSqlNodeDynamicSqlSourceSelectKeyGeneratorXMLLanguageDriver實例化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下的xmlparse委託XMLMapperBuilder來解析XML實例化助手類parse方法開始解析configurationElementcacheRefElement: 配置cache-refcacheElement: 使用緩存useNewCache: 構建Cache,放入上下文parameterMapElement: 配置parameterMapbuildParameterMapping: 構建參數映射addParameterMap構建Map並放入上下文resultMapElement配置resultMapbuildResultMapping構建Mapping映射實例化,包裝ResultMapping參數列表addResultMap構建Map並放入上下文sqlElement配置SQLbuildStatementFromContext根據上下文內容構建語句實例化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解析SQLparseDynamicTags檢查是否是動態SQLisDynamic方法來檢測實例化,這個很有意思,它的handleToken固定爲true,永遠是動態SQLnew GenericTokenParser("${", "}", handler) 處理$佔位符返回動態SQL的節點信息包裝動態節點爲混合節點將混合節點和上下文配置包裝在一起addMappedStatement將當前標籤的key、參數映射、結果映射包裝到MappedStatement中並放入上下文MappedStatement包裝到SelectKeyGenerator放入上下文創建DynamicSqlSource/RawSqlSource,並用助手類放入上下文parseCache解析註解CacheNamespace、parseCacheRef析註解CacheNamespaceRefparseStatement解析註解buildSqlSourceFromStrings構建SQLcreateSqlSource創建SQL資源DynamicSqlSource/RawSqlSource,有$爲動態,addMappedStatement保存到上下文XMLConfigBuilderXPathParserConfigurationMapperRegistryMapperAnnotXMLMapperBuilderMapperBuildResultMapResolverXMLStatemXMLIncludePropertyParserVariableToGenericTokenParserXMLScriptBuilderTextSqlNodeDynamicCheckMixedSqlNodeDynamicSqlSourceSelectKeyGeneratorXMLLanguageDriver
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章