前の記事では、XSDを使用してMyBatisのSQLMapper構成ファイルを確認する方法を紹介しました(1)。それを必要とする友達はそれを参照できます。
XSDファイルを記述し、XSDファイルを使用して検証する方法を確認し、SQLMapperファイルを解析します。つまり、DoparsESQLMAPPERRESOURCEWITHSCHEMA()メソッドを実装します。
この関数を実装するには、2つの基本的な要件があります。
(1)互換性:MyBatisのネイティブ構成と互換性がある必要があります。互換性には2つのレベルがあります。 1つは、DTD検証を使用することです。前述のように、元のプロセスに従う際に互換性に問題はありません。もう1つはXSD検証を使用することですが、MyBatisのネイティブ構成とも互換性がある必要があります。一方では、この互換性は上記のXSDファイルから保証されており、一方ではXML解析からも保証する必要があります。
(2)拡張性:変更の目的は拡張性であるため、拡張性も基本的な要件です。ただし、スケーラビリティは任意ではなく、カスタムXSDファイルである仕様に従って拡張する必要もあります。
これらの2つの基本的な要件を満たすために、以下は私のアイデアであり、主にSpringのカスタムネームスペースに基づいています。
1. entityResolverを作成し、「classpath*:**/dysd-* - namespaces.ini "など、クラスパスの下の指定されたモードの構成ファイルを読み取ります」
2。次のような名前空間メタ情報をINIファイルに定義します。
名前空間をセクションの名前として使用します。以下のスキーマとパーサーは、それぞれ名前空間のXSDファイルとパーサー実装クラスを表しています。このようにして、XMLのXSD名前空間に基づいて検証ファイルを見つけることができ、解析エントリがあります。
説明:
ApacheのCommons-Configurationは、INI形式ファイルの読み取りAPIを提供します
春には、Meta-Inf/Spring.schemasとMeta-inf/spring.handlersを使用して、XSDファイルとパーサー実装クラスを保存しました。ここでは、INIファイルセントラル構成を使用するように変更しました
すべてのクラスパスの下でワイルドカード文字を満たすINIファイルを読んでいるため、他の名前空間を簡単に拡張できます。 XSDを使用してJavaで確認する方法については、ここで詳しく説明しません
XMLの解析を3つの要素に分解します。コンテキストの解析、ファイルを解析します。 doparsesqlmapperresourcewithschema()メソッドも非常に簡潔です。
保護されたvoid doparsesqlmapperresourcewithschema(構成構成、リソースマッケージロケーション){isqlmapperparsercontext context = new sqlmapperparsercontext(configuration); xmlparserutils.parsexml(コンテキスト、マッパーロケーション);}パーサーインターフェイスは次のとおりです。
public interface iparser <e extends iparsercontext> {public void parse(e parsercontext、string location); public void parse(e parsercontext、string [] locationpatterns); public void parse(e parsercontext、inputstream inputstream);解析コンテキストとパーサーの実装クラスは、次の3つのレベルに分割されます。
(1)一般的な解析のコンテキスト:
public interface iparsercontext {public foolfereporter getProblemReporter(); public eventlistener getEventListener(); public sourceExtractor getSourceExtractor(); public Environment getEnvironment();}対応するレベルのパーサー実装クラスは、主に解析されたファイル(ストリングワイルドカードをリソースオブジェクトのコレクションにロードするなど)をロードし、繰り返しの解析が実行されないことを保証し、同時実行を保証する責任があります。
(2)XML解析コンテキスト
public Interface ixmlparsercontext extends iParsercontext {public boolean isnamespaceaware(); public documentloader getDocumentLoader(); public entityResolver getEntityResolver(); public errorhandler getErrorHandler(); public xmlparserdelegate getDelegate();}対応するレベルでのパーサー実装クラスは、主にリソースをドキュメントオブジェクトに変換し、変換プロセス中に検証する責任があります。
(3)sqlmapper解析コンテキスト
パブリックインターフェイスisqlmapperparsercontext extends ixmlparsercontext {public configuration getConfiguration;}対応するレベルのパーサー実装クラスは、主にルート要素がある名前空間でパーサーを見つけること、パーサーを使用してドキュメントを解析する責任があります。
最後に、解析はINI構成ファイルのSchemasQlMapperNamesPaceParserクラスに委任されます。ただし、このクラスはテキストファイルで構成する必要があるため、パラメーターを持つコンストラクターにとっては便利ではないため、SchemasQlMapperParserDelegateにさらに委任されます。
public class SchemaSqlMapperNamespaceParser implements INamespaceParser<ISqlMapperParserContext> {@Overridepublic void init() {}@Overridepublic void parse(ISqlMapperParserContext parserContext, Document document, Resource resource) {SchemaSqlMapperParserDelegate delegate = new schemasqlmapperparserdelegate(parsercontext、document、resource); delegate.parse();}@overridepublic void destory(){}}}この時点で、XSD検証が完了し、XML解析ポータルが見つかりました。その後の実際の解析は、schemasqlmapperparserdelegateにあります。
上記は、XSDを使用して、エディターが紹介したMyBatisのSQLMapper構成ファイルを確認する方法(2)です。それがあなたに役立つことを願っています。ご質問がある場合は、メッセージを残してください。編集者は時間内に返信します。 wulin.comのウェブサイトへのご支援ありがとうございます!