チーン
起動時SQL文関連マッパーインターフェースとMapper.xmlファイルは、エラーを検出するために
、図に示されるそのUMLダイアグラムを。
mapperRegistry
マッパーインターフェイスであり、その目的は、プロキシオブジェクトファクトリのレジストリである
MapperProxyFactory
プロキシオブジェクトを作成します
詳細なプロセス
- MyBatisのは、コンフィギュレーション情報をオブジェクトにマッピングされているすべての設定を初期化します
Configuration
オブジェクトmapperRegistry
の現在の使用記録するフィールドmapperRegistry
オブジェクトを- XMLファイルとアノテーション情報マッパーインタフェースを読んで、呼び出しが
mapperRegistry.addMapper()
埋めるknownMappers
ためのコレクション、クラスオブジェクトマッパーインタフェースのためのキー、値MapperProxyFactory
、目標を - あなたは、SQL文を実行する必要がある場合には
mapperRegistry.getMapper()
対応するが削除されますMapperProxyFactory
プロキシオブジェクトを作成するオブジェクトをMapperProxy
(JDKのダイナミックプロキシ) MapperProxy
invoke()
マッパーの方法は、パッケージ情報とインタフェースメソッドに対応するSQL文を取得しますMapperMethod
オブジェクトをし、呼び出しはMapperMethod.execute()
SQL文を実行します
フォルダの方法
- SqlCommandオブジェクトのの
名前フィールドのSQLステートメント(インターフェースのメソッド名)、タイプフィールドレコードSQLステートメント・タイプの名前を記録 - ParamNameResolverの
名前フィールド(のSortedMap型)記録位置インデックスとパラメータ名、キーインデックスリストパラメータの間の関係を、対応するパラメータのリスト、パラメータの値は、名前であり、ない@Parm注釈がインデックス名として使用されている場合
RowBoundsまたはパラメータパラメータのResultHandlerタイプがある場合は、パラメータのこれらの2つのタイプが記録またはコレクションに名前を付けるためにスキップ(マップデータを追加しません)が、インデックスが成長し、そして(名前とインデックスを使用して)、デフォルトの名前ですされていませんmap.size()によって名前を取得するには、それほどの数であり、インデックスの例名前ではなくなります
ParamNameResolver.gerNamedParams()
-変換名パラメーター配列(キー)パラメータ引数に渡されたユーザパラメータ値(値)が達成されるフォームの
名前-名前フィールド(タイプのSortedMap)から指標を削除entity
用いるentity.value
鍵として(パラメータ名)、args[entity.key]
すなわち、パラメータの値として値
- MethodSignatureの
インターフェイスマッパーに関する情報で定義されたカプセル化方法
//返回值是否是collection或数组类型
private final boolean returnsMany;
//返回值是否是map类型
private final boolean returnsMap;
//返回值是否是空
private final boolean returnsVoid;
//返回值类型
private final Class<?> returnType;
//返回值是map的话key的列名
private final String mapKey;
//参数列表中resultHandler类型的位置(第几个参数为resultHandler类型)
private final Integer resultHandlerIndex;
//第几个参数为rowBounds类型
private final Integer rowBoundsIndex;
//方法对应的ParamNameResolver对象
private final ParamNameResolver paramNameResolver;
MapperMethod.executor()
DB操作は、SQLの異なる種類に応じて完了しますSQLSESSIONメソッドの呼び出し、
rowCountResult()
戻り値はマッパーインタフェースに変換され、挿入文が戻るように処理するint型の値を