MyBatisのコアは、三つの段階を処理します
MyBatisの初期化モードビルダー
単純な複数のオブジェクトを使用してモデルビルダ(Builderパターン)は、複雑なオブジェクトを構築するためにステップバイステップ。デザインパターンのこのタイプのオブジェクトを作成するための最良の方法を提供し、スキーマを作成します属します。
複雑なオブジェクトを作成する:製品を
ビルダー:対象製品の様々な構成要素の構成を標準化する抽象インタフェースを与え。複雑なオブジェクトの所定の部分を作成するには、このインタフェースを達成するためにどのよう、特定のオブジェクトのメンバを作成含みません。
ConcreteBuilder:Builderのインタフェース、複雑なオブジェクトの異なる部分のために作成された特定のビジネス・ロジックを実現。構築プロセスが完了した後、生成物の例を提供します。
監督:インストラクターで特定の製品を伴わなかった複雑なオブジェクトの特定の部分を、作成するために、ビルダーを呼び出して、オブジェクトが完全の各部分がまたは特定の順序を作成することを確保するための唯一の責任です。
ビルダーモードは、シーンを使用しています
•オブジェクトをインスタンス化のプロセスは、上のコードの複雑なオブジェクトを分離するように、あなたはBuilderパターンを使用することができ、ブロックされた対象物の内部の詳細をインスタンス化された複雑な内部構造を持つオブジェクトを生成する必要性、;要するに、出会い」場合を設定パラメータの複数ビルダー「を検討する際に、
個々の部品および組立シーケンスのターゲット依存世代の例として、注目を組み立てる段階対象物は、モードを構築するために使用されてもよいです。
Builderパターンとファクトリパターンの違い:
MyBatisの初期化
MyBatisのクラス図ビルダー
キークラスマッパー
構成:コア初期化は、コンフィギュレーション・オブジェクト、単一の構成例では、ライフサイクル・アプリケーション・レベルにすべてのXML構成ファイルの情報をロードすることで開始MyBatisの。
MapperRegistry:レジストリマッパーインタフェースの動的プロキシクラスファクトリ。MyBatisのでは、インターフェイスは、動的プロキシオブジェクトを生成し、例えばのInvocationHandler mapperProxy、MapperProxyFactoryを実施しました。
このresultMapは:このresultMap ResultMappingカプセル化されたIDを使用して、ノードmapper.xmlファイルを解析するために、他のサブ要素をもたらします。
MappedStatement:mapper.xmlファイルを保存するためのSELECT、INSERT、UPDATEおよびノードを削除し、また、これらのノードの重要な特性の数が含まれています。
SqlSource:mapper.xmlファイルのSQL文はSqlSourceオブジェクトに解析され、最終的なSqlSourceに含まれている文を解析されただけ含まれていますか?プレースホルダは、実行するためにデータベースに直接提出することができます。
コンフィギュレーションのクラス図
このresultMapイラスト
mappedStatmentイラスト
MyBatisの初期化プロセス
演技の段階
結合モジュールの分析
MapperRegistry:マッパーインタフェースおよび対応するレジストリプロキシオブジェクトファクトリ。
MapperProxyFactory:動的インターフェイス生成エージェントのオブジェクト・マッパーのインスタンス。
MapperProxy:のInvocationHandlerインターフェイスを実装するには、マッパーインタフェースを達成するための拡張です。
MapperMethod:マッパーインターフェースは、対応する方法の情報、およびSQLステートメントに対応する情報をカプセル化し、それは、ブリッジインターフェイスマッパーマッピング構成ファイルのSQL文です。
XMLMapperBuilder.bindMapperForNamespaceから()の開始を開始
通訳MapperMethod
MapperMethod:マッパーインターフェースは、対応する方法の情報、およびSQL文を対応する情報をカプセル化し、それは、ブリッジインターフェイスマッパーマッピング構成ファイルのSQL文であるMapperMethodオブジェクトは、任意の状態情報を記録しない、それは物体の複数を表すことができます間で共有します。
SqlCommandオブジェクト:メソッド名から名前空間の構成方法およびSQL文の型を取得します;.
MethodSignature:マッパーインターフェース方法(パラメータ、戻り型)の情報。
ParamNameResolver:リファレンスに分析マッパーインターフェース方法。
翻訳プロセス
SQLSESSION関連するクラス
戦略パターンを作成しますSQLSESSION
戦略モード(Strategyパターン)Strategyパターンは一緒にアルゴリズムのセット、および各アルゴリズムのパッケージを定義するだけでなく、アルゴリズムは、それが独立して変更を使用するクライアントとは独立であるように、彼らは、お互いに置き換えることができるように。
コンテキスト:アルゴリズム発信者、選択ポリシー(戦略)のsetStrategy柔軟な方法を用いて、
戦略:統一されたインタフェースアルゴリズム。
ConcreteStrategy:特定のアルゴリズムの実装。
シーンモードの戦略を使用します:
問題の同じタイプのトリートメント各種、唯一の違いは、特定の動作です。
同じ抽象クラス複数のサブカテゴリーを表示されますが、のif-elseを使用するか、または特定のサブクラスを選択するには、時間をケースに切り替える必要があります。
SQLSESSION関連するクラスUML
SQLSESSIONはマッパー、管理業務を取得し、データベースには、コマンドの読み書きを行うことができ、それを通して外部に設けられた最も重要なコア・インタフェース・MyBaits、です。
SQLSESSIONクエリインターフェイスの入れ子関係
エグゼキュータのコアコンポーネント
エグゼキュータの成分分析
エグゼキュータは、コアインタフェースは、SQLSESSION機能は、それに基づいて実装されている基本的なデータベース操作方法を定義MyBaitsの一つです。
テンプレートモード
テンプレートパターン(テンプレートパターン):抽象クラスが定義され、その先/テンプレートを行う方法が開示されています。達成するために必要に応じてそのサブクラスでは、メソッドをオーバーライドすることができますが、呼び出しは抽象クラスで定義されます。アルゴリズムは動作のスケルトンを定義し、サブクラスのいくつかのステップを遅らせます。テンプレートメソッドサブクラスは、アルゴリズムの特定の実装を再定義するアルゴリズムの構造を変更しないことがあります。
BaseExecutorコード分析テンプレートモードのシナリオ
BaseExecutor:管理やトランザクション管理をキャッシュする機能を提供する方法エグゼキュータ・インターフェースのほとんどを実装する抽象クラス、およびその他の抽象メソッドサブクラスとして実装する必要がありますはdoupdate、doQueryおよび他の方法。
プロセスは一連のステップで構成されて遭遇は、テンプレートパターンの使用を検討する必要上、今回のビューの高レベルの点から、プロセスを構成同じで実行されるが、いくつかの手順が異なっていてもよい達成する必要があります。たとえば、次のキュータクエリ操作方法:
3つの実装クラスエグゼキュータの解釈
SimpleExecutor:デフォルトの設定は、各訪問が新しいのprepareStatementオブジェクトを作成する必要があり、データベースにアクセスするためのprepareStatementオブジェクトを使用します。
ReuseExecutor:プリコンパイルされたのprepareStatementオブジェクトAccessデータベース、Accessを使用しては、キャッシュ内の文オブジェクトを再利用します。
バッチ処理:バッチは、複数のSQL文を実行達成する能力。
三つの重要な弟のキュータ
SimpleExecutor doQuery()メソッドが発見されたの解釈によって、執行司令官は、それが若い3つのタスクを予定されています。
StatementHandler:その役割は、ステートメントのprepareStatementデータベースを使用するか、または操作を実行する、カイネクサス作用することです。
ParameterHandler:パラメータを設定するには、プリコンパイルされたSQL文、SQL文のプレースホルダは、対応するパラメータの名前とオブジェクトのパラメータの関連する属性を記録し、要素BoundSql.parameterMappingsコレクションに対応し、「?」
ResultSetHandler:データベース(ResultSetの)に返された結果セットは、ユーザにより指定された戻りのエンティティタイプをカプセル化します。
プロセスのエグゼキュータ内部の仕組み
StatementHandler分析
コア作業MyBatisのを完了StatementHandler、ファンデーションも実装を実行プログラム、機能が含まれます:このようなCRUD SQL文、結果セットのマッピング変換の実装のようなSQL文のパラメータを、結合文オブジェクトを作成します。
BaseStatementHandler:すべての抽象親クラスのサブクラス、初期化ステートメントは、サブクラスによって異なる特定のインスタンス化の声明(テンプレートパターン)を達成するために一連の操作を定義します。
RoutingStatementHandler:Excutor実数成分はサブクラスは、コンテキストから決定された特定のエンティティ・クラスを作成し、静的なプロキシモードを使用してインスタンス化されます。
SimpleStatmentHandler:パラメータ設定せずに、ステートメントを使用してオブジェクトアクセスデータベース。
PreparedStatmentHandler:プリコンパイルされたのprepareStatementオブジェクトアクセスのデータベースを使用しました。
CallableStatmentHandler:ストアドプロシージャを呼び出します。
ResultSetHandler分析
対応する結果セットオブジェクトに、マッピングルールのマッピング構成ファイルに従って得られたデータベースクエリResultSetHandlerからの結果。