パラメータ処理MyBatisの[学習のMyBatisのソース]

パラメータや処理のMyBatisのパラメータ値

図1に示すように、単一のパラメータ

  • 何の治療をMyBatisのありません

  • バリューの方法:

    #{パラメータ名/任意の名前}

<! - 社員getEmpById(整数のID);  - > 
< 選択ID = "getEmpById" resultTypeと= "com.mxc.bean.Employee" > 
    SELECT * FROM従業員からID =#{ID} 
</ 選択>
コードの表示

図2に示すように、複数のパラメータ

  • MyBatisのは自動的にマッピングする複数のパラメータとしてパッケージ化されます

    キー:PARAM1は、...、paramNのは、0、...、N-1であってもよい(すなわち、パラメータインデックス、Nはパラメータの数です)

    値:パラメータ値

  • バリューの方法:

    上記キー} {#

<! - 社員getEmpByIdAndLastName(整数ID、文字列lastNameの);  - > 
< 選択ID = "getEmpByIdAndLastName" resultTypeと= "com.mxc.bean.Employee" > 
    SELECT * FROM従業員からここID =#{PARAM1}とLAST_NAME =#{PARAM2} 
</ 選択>
コードの表示

 

複数のパラメータのためのクリアキーを割り当てます

  • @Param注釈キーは、SQLで簡単にアクセスするためのパラメータ値を明示的なパラメータを指定することもできます

  • バリューの方法:

    #{@ Paramの注釈指定されたキー}

<! - 社員getEmpByIdAndLastName(@Param( "ID")整数ID、@Param( "lastNameの")文字列lastNameの);  - > 
< 選択ID = "getEmpByIdAndLastName" resultTypeと= "com.mxc.bean.Employee" > 
    SELECT * FROM従業員からここID =#{ID}とLAST_NAME =#{lastNameの} 
</ 選択>
コードの表示

ロングパッケージキー@Paramの使用を指定するために使用されるパラメータの値を取るために、簡単なパラメータマップをカプセル化

 

3、パラメータはPOJOです

  • 複数のパラメータが正確であればPOJO属性値は、POJOに直接であってもよいです

  • バリューの方法:

    属性名} {#

<! - 社員getEmpByIdAndLastName(従業員EMP)。  - > 
< 選択ID = "getEmpByIdAndLastName" resultTypeと= "com.mxc.bean.Employee" > 
    SELECT * FROM従業員からここID =#{ID}とLAST_NAME =#{lastNameの} 
</ 選択>
コードの表示

 

4、引数が地図であります

  • パラメータはPOJO特性のうちの一つでない場合は、マップとしてパッケージ化することができます

  • バリューの方法:

    #{地図的キー}

<! -  
    社員getEmpByIdAndLastName(地図<文字列、オブジェクト>マップ); 
    マップ:
        地図<文字列、オブジェクト>マップ=新しいHashMapの<>(); 
        map.put( "ID"、1); 
        map.put( "lastNameの"、 "MXC")。
- > 
< 選択ID = "getEmpByIdAndLastName" resultTypeと= "com.mxc.bean.Employee" > 
    SELECT * FROM従業員からここID =#{ID}とLAST_NAME =#{lastNameの} 
</ 選択>
コードの表示

小規模チョッパー

従業員getEmp(@Param( "ID")、整数ID、文字列lastNameの)。
//取值:ID =>#{ID / PARAM1}とLastName =>#{PARAM2} 

従業getEmp(整数ID、@ Paramで( "E")従業員EMP)。
//取值:ID =>#{PARAM1}とLastName =>#{param2.lastName / e.lastName}
コードの表示

 

$#{} {}との類似点と相違点
と同じ:

値は、マップオブジェクトのプロパティ値またはPOJOで得ることができます

異なります:

#は{}:プリコンパイルされた形態であり、SQLステートメントにパラメータを設定し、SQLインジェクションを防止することができる
$ {}は:採取値が直接SQL文の組み立て、安全問題が存在することになる
利用シーン

ほとんどの場合、#{}を使用してパラメータの値をとります。{} $は、ネイティブJDBCのプレースホルダをサポートしていない場所で使用することができます。今年テーブルクエリによってとして:$ {年} _salaryから選択*;

第二に、ソース処理パラメータは、MyBatisのを達成するために

図1に示すように、内部データ構造

パッケージcom.spring.test.service.mybatis; 

インポートorg.apache.ibatis.builder.ParameterExpression; 

/ ** 
 * 
 * / 
パブリック クラスparamHandler { 

    公共 静的 ボイドメイン(文字列[]引数){ 
        paramsTokenHandler(); 
    } 


    / * * 
     *メソッド名:リスト<ユーザ> queryList(文字列名、RowBoundsのRowBounds、int型の年齢、@Param( "アドレス")文字列addresss); 
     *内部パラメータマッピング:
     * MethodSignature.SortedMap <整数、文字列>のparams 
     *パラメータリスト添字- >パラメータ名(それが@Paramある場合、それは値のノートを示し、ランキングRowBoundsに加えて、パラメータのそうでなければ現在の数、パラメータリストのResultHandler)
     *> 0 0- 
     * 2-> 1 
     * 3->アドレス
     *
     * MethodSignature.convertArgsToSqlCommandParam(オブジェクト[] argsが)戻り値:paramMap 
     * 
     * paramMap内部メモリ次のように:
     *パラメータ名- >パラメータ添字
     * 0->名前値
     * 1 - >年齢値
     *値のアドレス- > addresss 
     * 
     * param1->名前値
     * param2->年齢値
     の値* param3-> addresss 
     * 
     * / 
    パブリック 静的 ボイドparamsToParamMap(){ 

    } 

    / ** 
     #{checkedTime、jdbcType = BIGINT:*例 、typeHandler = COM。 } meituan.payment.fundsgateway.core.model.handler.DateForLongTypeHandler 
     * / 
    パブリック 静的 ボイドparamsTokenHandler(){ 
        文字列トークン = "checkedTime、jdbcType = BIGINT、typeHandler = com.meituan.payment.fundsgateway.core.model.handler.DateForLongTypeHandler" 
        ParameterExpression parameterExpression = 新しいParameterExpression(トークン)。
        文字列名 = parameterExpression.get( "プロパティ" ); 
        System.out.println(名); 
        ストリングjdbcType = parameterExpression.get( "jdbcType" )。
        System.out.println(jdbcType)。
        ストリングtypeHandler = parameterExpression.get( "typeHandler" )。
        System.out.println(typeHandler)。
    } 
}
コードの表示

2、特殊なデータ構造とアルゴリズム関与

org.apache.ibatis.scripting.defaults.DefaultParameterHandler

=> SQLはSQLステートメントに提供、引数リストから、指定された値を取得ParameterMappingをループすることで解決?プレースホルダ。

 

org.apache.ibatis.reflection.MetaObject

=>パラメータリストのメタオブジェクトにパッケージングする方法は、均一なパラメータ値を得る方法を提供します

 

org.apache.ibatis.reflection.property.PropertyTokenizer

=> propertyNameのメタオブジェクト位{PropertyName意味}プレースホルダは、SQLステートメントのSQLステートメントに応じて取得しましたか?値。

 

org.apache.ibatis.builder.SqlSourceBuilder

org.apache.ibatis.builder.ParameterMappingTokenHandler

org.apache.ibatis.parsing.GenericTokenParser

org.apache.ibatis.builder.ParameterExpression

=> {}#でSQL文を置き換えますか?、リストを解析<ParameterMapping>

おすすめ

転載: www.cnblogs.com/shangxiaofei/p/11442966.html