グローバル構成ファイルを解析した後の次のステップは、XMLMapperBuilder を通じて解析されるマッパー ファイルを解析することです。
XMLMapperBuilder の parse() メソッド:
public void parse() { if (!configuration.isResourceLoaded(resource)) { configurationElement(parser.evalNode("/mapper")); configuration.addLoadedResource(resource); bindMapperForNamespace(); } parsePendingResultMaps(); parsePendingCacheRefs(); parsePendingStatements(); }
現在のマッパー ファイルがロードされていない場合は、configurationElement() メソッドを呼び出して、 Mapper ファイルを解析します
Configuration.loadedResources コレクションに追加して繰り返しロードを防止します
#Mapper ファイルに対応する Mapper インターフェイスを取得して登録しますit
解析失敗の処理<resultMap>
tags
解析失敗の処理<cache-ref> ;
tags
解析に失敗した SQL ステートメントの処理
XMLMapperBuilder クラスのconfigurationElement() メソッドに注目します
MLMapperBuilder クラスのconfigurationElement() メソッド:
private void configurationElement(XNode context) { try { String namespace = context.getStringAttribute("namespace"); if (namespace == null || namespace.isEmpty()) { throw new BuilderException("Mapper's namespace cannot be empty"); } builderAssistant.setCurrentNamespace(namespace); cacheRefElement(context.evalNode("cache-ref")); cacheElement(context.evalNode("cache")); parameterMapElement(context.evalNodes("/mapper/parameterMap")); resultMapElements(context.evalNodes("/mapper/resultMap")); sqlElement(context.evalNodes("/mapper/sql")); buildStatementFromContext(context.evalNodes("select|insert|update|delete")); } catch (Exception e) { throw new BuilderException("Error parsing Mapper XML. The XML location is '" + resource + "'. Cause: " + e, e); } }
Mapper ファイルの名前空間属性を解析します
解析 <cache-ref>
タグ、このタグは他のキャッシュ キャッシュを参照するために使用されます
解析 <cache>
タグ、このタグは、Mybatis の 2 次キャッシュを有効にするために使用されます。1 次キャッシュはデフォルトで有効になっています。このメソッドでは、MapperBuilderAssistant クラスが解析されて、 Configuration.caches コレクションに保存されるキャッシュ。コレクションのキーは名前空間で、値は Cache object
Parsing<parameterMap>
タグです。このタグは廃止されました。通常は、パラメータのクラス名を定義するために parameterType
を使用します
分析<resultMap>
タグ、このタグは結果のマッピングであり、そのタグの下にあるすべてのサブタグが解析され、ResultMap オブジェクトに格納されます。具体的には、resultMap は解析後に最初に取得されます。type in、type は結果セットにマップされた Java オブジェクトであり、その後解析されますresultMap タグのサブタグ (<constructor>、<id>、<result>、<collection>
およびその他のタグを含む)。これらのタグは ResultMapping オブジェクトを生成し、次のような属性を取得します。 id を拡張し、ResultMapResolver オブジェクトを構築し、ResultMap オブジェクトを作成して、Configuration.resultMaps コレクションに保存します。
SQL タグを解析します。このタグは定義に使用されます。繰り返しの SQL フラグメントが解析され、保存されます。 Configuration.sqlFragments
Parsing<select>、<insert>、<update>、<delete>
およびその他の SQL ノードでは、これらのタグはこれらは XMLStatementBuilder を通じて解析される SQL ステートメントの追加、削除、変更、クエリです。最初に <include>
タグが解析され、次に <selectKey> が解析されます。 ;
タグは Configuration.keyGenerators コレクションに保存されます。最後に、LanguageDriver.createSqlSource() メソッドを使用して SqlSource オブジェクトが作成され、MappedStatement オブジェクトが構築されます。MappedStatement の sqlSource は SQL ステートメントを記録し、sqlCommandType は型を記録しますSQL ステートメントの内容。Configuration.mappedStatements コレクションの
以上がJava Mybatis の初期化用に Mapper.xml マッピング ファイルを構成する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。