-MyBatisソースコード環境の構築と全体的なアーキテクチャ分析

前回は、MyBatisフレームワークの使用をすぐに開始できるように、注文システムの例を通じて、実際のプロジェクトでのMyBatisの基本的な使用法を示しました。今回は、MyBatisソースコードのデバッグ環境を構築し、MyBatisのソースコード構造を分析します。これらは、後でソースコード分析への道を開くものです。

MySQLのインストールと起動
リレーショナルデータのインストールと起動は、MyBatisソースコードをデバッグするための基礎です。現在、多くのインターネット企業がMySQLを優先データベースと見なしているため、ここではMyBatisソースコードをデバッグするためにMySQLデータベースも選択します。

  1. MySQLのダウンロード
    まず、MySQL公式WebサイトからMySQL CommunityServerの最新バージョンをダウンロードします。MySQL Community ServerはMySQLサーバーのコミュニティバージョンであり、無料で試すことができます。ここでは、tar.gzを使用してインストールすることを選択したため、次の図の赤いボックスに示すように、対応するtar.gzインストールパッケージをダウンロードする必要があり
    ここに画像の説明を挿入します
    ます。MySQLダウンロードインターフェイス

  2. tar.gzインストールパッケージダウンロードするようにMySQLを構成した後、次のコマンドを実行してtar.gzパッケージを解凍し、mysql-8.0.22-macos10.15-x86_64ディレクトリを取得します。
tar -zxf mysql-8.0.22-macos10.15-x86_64.tar.gz

次に、次のコマンドを実行して、support-filesディレクトリに入ります。

cd ./mysql-8.0.22-macos10.15-x86_64/support-files

次のコマンドを実行して、編集用にmysql.serverファイルを開きます。

vim mysql.server

ここでは、basedir変数とdatadir変数をMySQLのルートディレクトリとMySQLディレクトリの下のデータディレクトリに設定し(次の図を参照)、最後に:wqコマンドを実行して変更をmysql.serverに保存して終了する必要があります。 。
ここに画像の説明を挿入します
mysql.serverファイルの変更例図3.MySQLを起動した

、次のコマンドを実行してMySQLbinディレクトリに入りました。

cd ../bin/

次のmysqldコマンドを実行してMySQLを初期化しますが、ここに追加されたパラメーター情報に注意する必要があります。basedirパラメーターとdatadirパラメーターを使用してルートディレクトリとデータディレクトリを指定できます。

./mysqld --initialize --user=root --basedir=/Users/xxx/Downloads/mysql-8.0.22-macos10.15-x86_64 --datadir=/Users/xxx/Downloads/mysql-8.0.22-macos10.15-x86_64/data

初期化プロセスが正常に完了した後、次の図に示すように、コマンドラインでMySQLの初期デフォルトパスワードを取得できます。

ここに画像の説明を挿入します
MySQLを正常に初期化するイメージの例
デフォルトのパスワードを使用して、MySQLサービスを開始してログインできます。最初に、support-filesディレクトリにジャンプする必要があります。

cd ../support-files/

次に、次のコマンドを実行してMySQLサービスを開始します。

./mysql.server start

MySQLサービスが正常に開始されると、次の図に示すような出力が表示され
ここに画像の説明を挿入します
ます。MySQLを正常に開始する例図
4. MySQLにログインし
て、binディレクトリにジャンプします

cd ../bin/

そして、次のコマンドを実行して、以前に取得したデフォルトのパスワードを使用してMySQLにログインします。

./mysql -uroot -p'rAUhw9e&VPCs'

ログイン後、次の図に示すように、MySQL Shellに入ることができます。MySQL
ここに画像の説明を挿入します
への正常なログインの例次に
、MySQL Shellでパスワードを変更できます。具体的なコマンドは、次のとおりです。

ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';

実行が成功した後、次にMySQL Shellを使用して接続するときは、新しいパスワードでログインする必要があります。

最後に、MySQLサービスを閉じたい場合は、support-filesディレクトリにジャンプして、次のコマンドを実行できます。

cd ../support-files/

./mysql.server stop

次の出力が表示された場合は、MySQLサービスが正常にシャットダウンされたことを意味します。MySQLが正常にシャットダウンされた
ここに画像の説明を挿入します
サンプル図

ここで、実際の開発プロセスでは、Navicat、MySQL Workbench Community EditionなどのMySQLグラフィカルインターフェイスクライアントが一般的に使用されることにも注意してください。通常、MySQLはオンラインマシンのLinuxコマンドラインでのみ直接使用されます。シェルはいくつかの操作を実行します。

もちろん、私は個人的にこれらのグラフィカルインターフェイスクライアントを使用することをお勧めします。これにより、日常の開発効率を向上させることができます。
MyBatisソースコード環境の構築
MySQLをインストールして起動したら、MyBatisソースコード環境の構築を開始できます。

まず、JDK、Maven、GitなどのJava開発用の基本環境をインストールする必要があります。これらのソフトウェアのインストールについてはここでは紹介しません。すでに十分に理解している必要があります。

次に、次のコマンドを実行して、GitHubからMyBatisのソースコードをダウンロードします。

git clone https://github.com/mybatis/mybatis-3.git

ネットワーク速度に応じて、このダウンロードプロセスの時間のかかるプロセスは異なります。ダウンロードが完了すると、次の出力が得られます。MyBatis
ここに画像の説明を挿入します
ダウンロードの例図
この時点で、mybatis-3ディレクトリをローカルに取得し、次のcdコマンドを実行してディレクトリに入ることができます。

cd ./mybatis-3/

次に、次のgitコマンドを実行してブランチを切り替えます(このコースは、分析用のMyBatis 3.5.6バージョンのコードに基づいています)。

git checkout -b mybatis-3.5.6 mybatis-3.5.6

切り替えが完了したら、次のgitコマンドを使用して、ブランチ切り替えが成功したかどうかを確認することもできます。

git branch -vv

ここでは、次の図に示すような出力が得られます。これは、mybatis-3.5.6タグに切り替えたことを意味します。
ここに画像の説明を挿入します
gitブランチの例の図

最後に、次の図に示すように、IDEAを開き、[開く]または[インポート]を選択して、MyBatisソースコードを
ここに画像の説明を挿入します
インポートします。IDEAインポートオプションの図
インポートが完了すると、次のようにMyBatisのソースコード構造が表示されます。図:
ここに画像の説明を挿入します
MyBatisアーキテクチャの概要で
MyBatisソース環境のセットアップが完了しましたその後、MyBatisのアーキテクチャを分析します。

MyBatisは、次の図に示すように、基本サポートレイヤー、コア処理レイヤー、インターフェイスレイヤーの3つのアーキテクチャレイヤーに分かれています。
ここに画像の説明を挿入します

  1. 基本サポートレイヤー
    基本サポートレイヤーは、MyBatisフレームワーク全体の基盤であり、MyBatisフレームワーク全体に非常に基本的な機能を提供します。各モジュールは、まとまりのある単一の機能を提供します。MyBatis基本サポートレイヤーは、これらの単一機能に基づくことができます。上の図に示すように、9つの基本モジュールに分割します。

リソースローディングモジュールの機能は非常にシンプルで、使用頻度も高くないので、ここでは紹介しません。興味のある方は、関連資料を参考にして理解してください。以下では、残りの8つのモジュールの基本機能について簡単に説明します。このコースの2番目のモジュールでは、これらの基本モジュールの特定の実装を詳細に分析します。

1つ目は型変換モジュールです。前の講義で示した注文システムの実装では、mybatis-config.xml構成ファイルのタグを使用してクラスのエイリアスを定義できます。ここで使用される「エイリアスメカニズム」は、MyBatis基本サポートレイヤーの型変換モジュールです。達成しました。

「エイリアスメカニズム」に加えて、型変換モジュールは、MyBatisのJDBC型とJava型の間の相互変換も実装します。この関数は、実際のパラメーターのバインドとResultSetシナリオのマッピングに反映されます。

SQLテンプレートがユーザーをバインドして実際のパラメーターを渡すシナリオでは、型変換モジュールはJava型データをJDBC型データに変換します。

ResultSetを結果オブジェクトにマッピングするとき、型変換モジュールはJDBC型データをJava型データに変換します。

具体的な状況を次の図に示します
ここに画像の説明を挿入します
。2番目はログモジュールです。ログは、本番環境でのトラブルシューティング、バグの特定、パフォーマンスのボトルネックのロックの手がかりの主な情報源です。成熟したシステムには、妥当なレベルと完全な情報を備えたログモジュールがあり、MyBatisも例外ではありません。MyBatisは、サードパーティのロギングフレームワークをJavaエコシステムに統合するためのロギングモジュールを提供します。このモジュールは現在、Log4j、Log4j2、slf4jなどの優れたロギングフレームワークを統合できます。

3つ目はリフレクションツールモジュールです。Javaのリフレクション機能は非常に強力です。多くのオープンソースフレームワークは、比較的柔軟な要件を達成するためにリフレクションに依存していますが、ほとんどのJavaプログラマーは、実際の作業でリフレクションテクノロジーを直接使用することはめったにありません。MyBatisのリフレクションツールボックスは、Javaリフレクションに基づくカプセル化のレイヤーであり、上位ユーザーに柔軟で便利なAPIインターフェイスを提供すると同時に、Javaのネイティブリフレクションに関連するメタデータをキャッシュします。これにより、リフレクションコードの実行効率が向上します。反射操作のパフォーマンス。

4番目はバインディングモジュールです。前の講義で紹介した注文システムの例では、SqlSessionを介してMapperインターフェースのプロキシを取得し、このプロキシを介して関連するMapper.xmlファイルでデータベース操作を実行できます。このようにして、いくつかのエラーをコンパイル時に進めることができ、この関数はBindingモジュールによって完了されます。

ここでは、MyBatisを使用する場合、Mapperインターフェイスの特定の実装を作成する必要はなく、Bindingモジュールを使用してMapperインターフェイスの動的プロキシオブジェクトを自動的に生成することを具体的に説明します。一部の単純なデータ操作では、Mapperインターフェイスで直接アノテーションを使用することもできます。Mapper.xml構成ファイルを記述する必要はありませんが、ResultSetマッピングと動的SQLが非常に複雑な場合は、 Mapper.xml構成ファイル。便利。

5番目はデータソースモジュールです。永続層フレームワークのコアコンポーネントの1つはデータソースです。卓越したパフォーマンスを備えたデータソースは、システムのパフォーマンスを2倍にすることができます。MyBatis自体は、MyBatisのデフォルトの実装でもある一連の優れたデータソース実装を提供します。さらに、Javaエコシステムには、選択できる優れたオープンソースデータソースが多数あります。MyBatisのデータソースモジュールは、サードパーティのデータソースと統合するための関連インターフェイスも提供し、ユーザーにより多くの選択肢を提供します。柔軟性が向上しました。データソーススイッチングの。

6番目はキャッシュモジュールです。データベースは実際の世代では非常にコアなストレージであり、多くのビジネスデータがデータベースに分類されるため、データベースのパフォーマンスの長所と短所は、上位レベルのビジネスシステムの長所と短所に直接影響します。私たちのオンラインビジネスの多くは、読み取りを増やし、書き込みを減らすというシナリオにあります。データベースでボトルネックが発生した場合、キャッシュは最も効果的で一般的に使用される方法の1つです(下の図を参照)。キャッシュを正しく使用すると、傍受される可能性があります。キャッシュ内の一部のデータベース要求。このレベルでは、これにより、データベースの一部へのプレッシャーを軽減し、システムパフォーマンスを向上させることができます。
ここに画像の説明を挿入します
RedisやMemcachedなどの外部サードパーティキャッシュの使用に加えて、永続性フレームワークには通常、組み込みキャッシュも付属しています。たとえば、MyBatisは第1レベルと第2レベルのキャッシュを提供します。特定の実装はのキャッシュモジュールにあります。基本的なサポートレイヤー。

第七に、パーサーモジュール。前の講義の注文システムの例では、解析する必要のあるMyBatisの2つの主要な構成ファイルがあります。1つはmybatis-config.xml構成ファイルで、もう1つはMapper.xml構成ファイルです。これらのファイルは両方とも、MyBatisのパーサーモジュールによって解析されます。MyBatisは、主にXPathに依存して、XML構成ファイルとさまざまな式の効率的な解析を実現します。

8番目のトランザクション管理モジュール。永続層フレームワークは通常、データベーストランザクション制御を実装するための一連のトランザクション管理メカニズムを提供します。MyBatisは、データベース内のトランザクションの単純な抽象化を提供し、単純で使いやすいトランザクションインターフェイスと実装を提供します。通常の状況では、JavaプロジェクトはSpringと統合され、Springフレームワークが問題を管理します。後のコースでは、トランザクション管理関連の統合を含む、MyBatisとSpringの統合の原則についても詳しく説明します。

  1. コアプロセッシングレイヤー
    MyBatisの基本的なサポートレイヤーを紹介した、MyBatisのコアプロセッシングレイヤーを分析してみましょう。

コア処理レイヤーはMyBatisのコア実装であり、MyBatisの初期化とSQLステートメントの実行プロセス全体が含まれます。以下では、コア処理レイヤーの各部分の実装を紹介します。

1つ目は構成分析です。MyBatisには、構成情報を追加できる3つの場所があります。つまり、mybatis-config.xml構成ファイル、Mapper.xml構成ファイル、およびMapperインターフェイスの注釈情報です。MyBatisの初期化中に、構成情報が読み込まれ、解析後に取得された構成オブジェクトが構成オブジェクトに保存されます。

たとえば、注文システムの例で使用されているタグ(つまり、カスタムクエリ結果セットのマッピングルール)は、ResultMapオブジェクトに解析されます。取得したConfigurationオブジェクトを使用してSqlSessionFactoryオブジェクト(つまり、SqlSessionオブジェクトを作成するファクトリオブジェクト)を作成してから、SqlSessionオブジェクトを作成してデータベース操作を実行できます。

2つ目は、SQL解析およびスクリプトモジュールです。MyBatisの最大のハイライトは、動的SQL関数です。MyBatisが提供するタグを使用するだけで、実際の動作条件に従って実際に実行されるSQLステートメントを動的に生成できます。MyBatisが提供する動的SQLタグは、タグ、タグ、タグ、タグなど、非常に豊富です。

MyBatisのスクリプトモジュールは、SQLを動的に生成するコアモジュールです。実行時にユーザーから渡された実際のパラメーターに従って動的SQLのタグを解析し、S​​QLテンプレートを作成してから、SQLテンプレートのプレースホルダーを処理し、実行時にプレースホルダーに実際のパラメーターを入力して、データベースを取得します。真に実行可能なSQLステートメントであるため。

3つ目はSQLの実行です。MyBatisでは、SQLステートメントを実行するために、多くのコンポーネントが関係しています。コアコンポーネントは、Executor、StatementHandler、ParameterHandler、およびResultSetHandlerです。

その中で、エグゼキュータはトランザクション管理モジュールを呼び出してトランザクション関連の制御を実装すると同時に、キャッシュモジュールを介して第1レベルのキャッシュと第2レベルのキャッシュを管理します。SQLステートメントの実際の実行は、StatementHandlerによって実装されます。それはどのくらい正確に行われますか?StatementHandlerは最初にParameterHandlerに依存してSQLテンプレートの実際のパラメーターをバインドし、次にjava.sql.StatementオブジェクトがSQLステートメントとバインドされた実際のパラメーターをデータベースに渡して実行し、データベースからResultSetを取得します。 ResultSetHandlerは、ResultSet MappedをJavaオブジェクトにバインドし、呼び出し元に返します。これは、SQL実行モジュールのコアです。

次の図は、MyBatisがSQLステートメントを実行するコアプロセスを示しています。

ここに画像の説明を挿入します
4つ目はプラグインです。多くの成熟したオープンソースフレームワークは、さまざまな方法で拡張機能を提供します。フレームワークのネイティブ機能が特定のシナリオに対応できない場合、これらのシナリオにいくつかのプラグインを実装してニーズを満たすことができるため、フレームワークに十分な活力を与えることができます。これは、MyBatisプラグインインターフェイスの意味でもあります。

同時に、実際のアプリケーションでは、カスタムプラグインを介してMyBatisを拡張したり、MyBatisのデフォルトの動作を変更したりすることもできます。プラグインはMyBatisカーネルの動作に影響を与える可能性があるため、プラグインをカスタマイズする前に、MyBatisの内部動作原理を理解して、期待に沿わないプラグインを記述したり、奇妙な機能上のバグやパフォーマンスの問題を引き起こしたりしないようにする必要があります。

  1. インターフェイスレイヤー
    インターフェイスレイヤーは、MyBatisによる呼び出しに公開されるインターフェイスのコレクションです。これらのインターフェイスは、MyBatisを使用するときに最も一般的に使用されるインターフェイスの一部です。たとえば、SqlSessionインターフェイス、SqlSessionFactoryインターフェイスなどです。その中で最も重要なのはSqlSessionインターフェースであり、これを介して、マッパーエージェントの取得、SQLステートメントの実行、トランザクションスイッチの制御などの多くの機能を実行できます。

おすすめ

転載: blog.csdn.net/Rinvay_Cui/article/details/113833353