Mybatis 3.4.6ソースコードの深い分析呼び出しのメインプロセス

記事ディレクトリ

 

1。概要

MyBatisは、カスタマイズされたSQL、ストアドプロシージャ、高度なマッピングをサポートする優れた永続性レイヤーフレームワークです。MyBatisは、ほとんどすべてのJDBCコードとパラメーターの手動設定と結果セットの取得を回避し、XML構成によるJDBCの反復コードとパラメーター設定のほとんどと結果セットのマッピングを排除します。開発者として、よりよく学び、理解するためには、優れたフレームワークのソースコードとmybatisのデザインアイデアを詳細に調査して理解し、参照を改善する必要があります。同時に、ソースコードを研究することで、デザインパターンの本質をよりよく理解できます。

2環境設定

mybatisのソースコードgit source linkからダウンロードして、アイデアに注ぐことができます上記のソースコードは、バージョン3.4.6のソースコードです。

3プロジェクト階層の概要

MyBatisのコード実装の観点からは、MyBatisには主に次のコアコンポーネントが含まれていると個人的に信じています。

  • SqlSessionは、MyBatisの主要なトップレベルAPIとして機能し、データベースと対話するセッションを表し、必要なデータベースの追加、削除、変更、およびクエリ機能を完了します
  • エグゼキューターMyBatisエグゼキューターはMyBatisスケジューリングの中核であり、SQLステートメントの生成とクエリキャッシュのメンテナンスを担当します。
  • StatementHandlerは、JDBCステートメント操作をカプセル化し、パラメーターの設定やステートメント結果セットのリストセットへの変換など、JDBCステートメントの操作を担当します。
  • ParameterHandlerは、ユーザーから渡されたパラメーターをJDBCステートメントが必要とするパラメーターに変換します。
  • ResultSetHandlerは、JDBCから返されたResultSet結果セットオブジェクトをListタイプのコレクションに変換します。
  • TypeHandlerは、Javaデータ型とJDBCデータ型の間のマッピングと変換を担当します
  • MappedStatement MappedStatementは、<select | update | delete | insert>ノードのパッケージを維持します。
  • SqlSourceは、ユーザーから渡されたparameterObjectに基づいてSQLステートメントを動的に生成し、BoundSqlオブジェクトに情報をカプセル化して、
  • BoundSqlは、動的に生成されたSQLステートメントと対応するパラメーター情報を表します
  • 構成MyBatisのすべての構成情報は、構成オブジェクトに保持されます。
  • MapperProxyFactoryインターフェースプロキシファクトリクラスこのクラスは主に、jdkプロキシマッパーの実装でSqlSessionを呼び出すことを試みます。インターフェースクラスの名前は構成ファイルのnameSpaceの値に対応し、ラベルのIDはメソッドnameに対応し
    ます。それらの関係(画像は盗まれます) :
    関係図
    MapperProxyFactoryも上の画像に追加されている場合は、それを一番上に配置する必要があります。これは、マッパーインターフェイスを自動的に実装し、sqlsessionでメソッドを呼び出すのと同じです。

4 Mybatis分析構成ファイルのタイミング図

Mybatisは、SQL、ストアドプロシージャ、およびXML構成による高度なマッピングをカスタマイズするためのものです。したがって、最初に、関連するマッパー構成ファイルを解析し、お互いの解析結果をConfigurationクラスに配置する必要があります。個人的には、主なものは次のように配置されていると思います(クラス名、メソッド):

  • SqlSessionFactoryBuilder.build()パラメータは構成ファイルのInputStreamです(この構成はmybatisの構成であり、開発で頻繁に書き込む必要があるsqlファイルの構成ではありません)。この機能は、XMLConfigBuilder.parse()を呼び出して構成を取得し、DefaultSqlSessionFactoryオブジェクトを作成します。
  • XMLConfigBuilder.parse()パラメーターは、構成ファイルのInputStreamです(この構成はmybatisの構成であり、開発で頻繁に書き込む必要があるsqlファイルの構成ではありません)。XPathParser.evalNode()を呼び出してXNodeノードを取得し、XMLConfigBuilder.parseConfigurationを呼び出してノードを解析します。解析ノードは、さまざまなノードを介してさまざまなメソッドを呼び出し、構成の並列解析の結果を分析して保存します。分析で最も重要なことは、XMLConfigBuilder.mapperElementで解析されるSQL構成ファイルを解析することです。
  • MLConfigBuilder.mapperElement()のパラメーターはXnodeノードです。ここでの関数は、主にXMLMapperBuilder.parseメソッドを呼び出すことです。このメソッドは、開発で頻繁に書き込む各SQLファイルの解析に重点を置いています。
  • XMLMapperBuilder.parse()パラメータは、開発で頻繁に書き込む必要があるSQL構成です。この機能は主にSQLファイルを解析するためのものです。これは、解析などによく使用されるタグに分割されています。解析後、設定を呼び出します.addMappedStatementメソッドはMappedStatementオブジェクトをmappedStatementsのマップに保存し、キーは名前空間タグのIDです。実際、SSMフレームワークを使用する場合、通常はここから始めます。ミバリススプリングはここから始まります。興味がある場合は
    mybaris-speringのSqlSessionFactoryBean.buildSqlSessionFactory()メソッド確認してください。ここでのメインプロセスは非常に多くありますが、他の多くの分析や関係者が行って確認できます。
    タイミング図を分析する

5 Mybatis呼び出しシーケンス図

構成ファイルは以前に解析されており、次は関連するメソッドを呼び出してデータベースを操作します。実際、selectListおよびselectOneは、selectListメソッドを呼び出すことによって実際に照会されます(selectOneのみがクエリリストによって返される項目の数が1かどうかを判別します。それ以外の場合は、TooManyResultsExceptionがスローされます)。 、そしてmybatis-springを統合する場合でも、3mybatisソースコードを直接表示する場合でも、sqlSessionのメソッドを介して操作されます。これは1.2の改良に相当し  ます。
Mybatis呼び出しシーケンス図-sqlSession呼び出し
私が個人的にもっと重要だと思うこの画像の説明は次のとおりです。

  • CachingExecutor ------これは、デフォルトで有効になっているmybatis 2次キャッシュ実行クラスです。デフォルトで有効になっていますが、実際のストレージエンジンを各nameSpace構成ファイルに追加する必要があります。追加しないと、直接実行されます。 executorを調整してデータベースを操作します。これはnameSpaceに基づいているため、インターネット上の多くの人々は、2次キャッシュを使用することは推奨されていません(つまり、nameSpaceに基づいているため、たとえば、すべてのユーザー操作であるuserMapperがあり、他の場所もありますユーザー操作がない場合は問題なく、それ以外の場合は問題があります。)
  • SimpleExecutor ------これはexecutorクラスであり、ReuseExecutorやBatchExecutorを含め、これには多くの種類があります。構成によって、異なるexecutorを選択できます。デフォルトで一般的に使用されるメソッドは、BaseExecutorから継承するSimpleExecutorです。delegate。query()メソッドとqueryFromDatabaseメソッドは両方とも親クラスのメソッドであり、doQuery()はデータベースを操作するために異なるエグゼキューターを呼び出すメソッドです。一般的なメソッドには、prepareStatement()メソッドもあります。このメソッドは、データベース接続に戻り、SQLステートメントを事前実行して、クエリパラメーターを設定します。
  • PreparedStatementHandler ------このクラスは実際にパラメーターを設定し、データベースから返されたデータを取得し、パラメーターをDefaultResultSetHandlerに渡して、データベースから返されたデータを設定したデータにカプセル化します。

おすすめ

転載: blog.csdn.net/csdn_lulinwei/article/details/108657872