MethodSignature分析
実行すべきパラメータを取得する3 MethodSignature役割MapperMethodクラス名を提供し、プロセスパラメータ@Param注釈を取得、@MapKey(以下で@MapKey役割が言及される)、メソッドの戻り型の付いたパラメータを取得、マーク必要な場合、フラグ操作を選択。ここMethodSignatureのすべての属性があります。
- 民間最終ブールreturnsMany; //複数値クエリかどうか
- 民間最終ブールreturnsMap;マップかどうかを//クエリ
- 民間最終ブールreturnsVoid、無効かどうかを//クエリ
- 民間最終ブールreturnsCursor; //カーソル問合せの場合
- 民間最終クラス戻り値の<?>; //戻り値の型
- 民間最終文字列mapKey; //はmapKeyの値を取得
- 民間最終整数resultHandlerIndex。
- 民間最終整数rowBoundsIndex。
- 民間最終ParamNameResolver paramNameResolver; //パラメータパーサ
MyBatisのが実装三種類提供し、コンストラクタは、最初の戻り型、返すパラメータパーサーの種類を見つけるためにmapperInterface自体と親の全てとインターフェースのすべてのタイプを取得した基準値を取得し、次のコードを遵守のためには、ParameterizedTypeをTypeVariable、GenericArrayTypeの。値のタイプは、クエリ、空隙クエリ、マップクエリ、カーソルクエリ、多値クエリを行われるかを決定するために、後続の選択によって返された場合、これはmapperMethod(中exeuteを行い、関連するプロパティにマーキングする)方法意志裁判官。マッパーコンストラクタメソッドも実行されるようにチェックマーク@MapKey注釈がある場合、この結果は、戻り値の型が地図であることを意味している場合、。
1 公共 MethodSignature(構成設定、クラス<?> mapperInterface、メソッド法){ 2 // 解析返回的类型は、ParameterizedType、TypeVariable、GenericArrayType 3 種類resolvedReturnType = TypeParameterResolver.resolveReturnType(方法mapperInterface)。 4 もし(resolvedReturnType のinstanceofクラス<?> ){ 5 本 .returnType =(クラス<?> )resolvedReturnType。 6 } そう であれば(resolvedReturnType のinstanceof は、ParameterizedType){ 7 この .returnType =(クラス<?>)((は、ParameterizedType用)resolvedReturnType).getRawType(); 8 } 他{ 9。 この .returnType = Method.getReturnType(); 10 } 11。 この .returnsVoid = ボイド。クラス .equals(この.returnType); 12である // かどうかコレクションまたは配列型 13は、 この .returnsMany = configuration.getObjectFactory()IsCollection(。この .returnType)|| この.returnType.isArray(); 14 //は、カーソルのタイプかどうかを判断する 15 本 .returnsCursorカーソルを= クラス.equals(この.returnType); 16 // 取得MapKey注釈 17。 この .mapKey = getMapKey(方法) 18である //があるか否かmapkey NULLを判定する 。19 この = .returnsMapをこの!.mapKey = NULL ; 20は この .rowBoundsIndex = getUniqueParamIndex(方法、RowBounds。クラス)、 21は この .resultHandlerIndex = getUniqueParamIndex(メソッド、ResultHandler クラス); 22である // 初期化パラメータ名パーサ 23は、 この .paramNameResolver = 新しい新ParamNameResolver(構成方法)。 24 }