mybatisのforeachの使い方を詳しく説明します。グアーカイブmybatisのforeachの使い方を詳しく説明します。foreachmybatisのmapper.xmlファイルを作る時によく使われています。sql文の検索条件を動的に生成します。この時はmybatisのforeachを使うことができます。foreach元素の属性は主にitem、index、collection、open、separator、closeがあります。item:セット内の要素反復時の別名であり、このパラメータは必須である。index:listおよび配列において、indexは要素のシーケンス番号であり、mapにおいて、indexは要素のkeyであり、このパラメータはオプションである。open:foreachコードの開始記号は、一般的に(close=「)」と併用されます。n()、values()によく使われます。このパラメータはオプションです。separator:要素間のセパレータ、例えばin()の場合、separator="は、要素の中間に自動的に使用されます。"仕切り、カンマの手動入力によるsqlエラーを避けるために、in(1,2)のように。このパラメータはオプションですclose:foreachコードのクローズ記号は、一般的に、オープン=「(」と併用します。n()、values()によく使われます。このパラメータはオプションですcollection:foreachを行う対象として、Listオブジェクトはデフォルトではキーとして「list」を使用しています。配列オブジェクトはキーとしての代わりに「array」があります。Mapオブジェクトにはデフォルトのキーがありません。参加時には@Param("keyName")を使ってキーを設定することができます。keyNameを設定すると、list、arrayは無効になります。パラメータの対象となるフィールドがある場合を除きます。入参はUser対象です。このコレクション=「ids」です。idsを持っているならば。入参はUserオブジェクトで、collection=「ids.id」foreachを使う時に一番重要なのは間違いやすいのがcollection属性です。この属性は必ず指定しなければなりませんが、その属性の値は違っています。次の3つの状況があります。.入力されたのがシングルパラメータであり、パラメータタイプがListである場合、collection属性値はlistである。入力されたのが単一パラメータであり、パラメータタイプがarray配列である場合、collectionの属性値はarray.である。入ってきたパラメータが複数の場合、それらを一つのMapにパッケージする必要があります。シングルパラメータもmapにパッケージすることができます。実際にあなたがパラメータを入力した時、MyBatisの中にもMapにパッケージされます。mapのkeyはパラメータ名です。このときのcollection属性値は、入ってきたListまたはarrayオブジェクトが自分のパッケージのmapの中にあるkeyである。最後の条について、公式見解を見てみます。リストの例や配列をパラメータの対象としてMyBatisに送ることができます。すると、MyBatisは自動的にMapに包装し、名前をキーにします。Listの例は「list」をキーとし、配列例のキーは「array」とする。したがって、マルチパラメータであろうと、シングルパラメータであろうと、arrayタイプであろうと、mapにカプセル化して転送することができる。転送がListであれば、mybatisはlistをkey、list値をobjectのmapとしてパッケージ化します。arrayであれば、arrayをkey、arrayの値をobjectのmapとしてパッケージ化します。自分でカプセル化するなら、collectionには自分のパッケージ化したmapのkey値を入れます。公式文書はこれを使っていますので、説明は比較的短く、細部についても見落とされています。多くの学生が使っています。foreachという関数の中で、collection属性は何をしますか?注意事項がありますか?文書が不完全なので、これはソースコード解析の方法で各属性の関連要求を分析するしかないです。collection属性の用途は、入力を受信する配列またはListインターフェースで実現される。その名前の要求に対して、Mybatisは実現中にはちょっと分かりにくいので、特に注意しなければなりません。次にソースコードの分析を開始します。3.0.5バージョンを使用しています。SQLプロファイル解析を行うための入り口を見つけます。execute(Object[]args)は、この方法が実行されるエントリです。n集合クエリに対して、アプリケーションはselectForListまたはSelctForMap方法です。どの方法を呼び出しても、元JDKから入ってきたパラメータObject[]タイプに対して、getParam法でObjectに変換しますが、この方法は何をしますか?ソースの分析は以下の通りです。上の図の中で赤い二つのところは、一つのパラメータと複数のパラメータの処理方法が違っていることに驚きました。パラメータの個数が一つより大きい場合、Mapにパッケージされます。key値はMybatisのParam注釈を使用すると、このkey値を使用します。なければ、デフォルトではデータ番号を統一して使用します。この問題を先にメモして、コードの解析を続けます。rowBounds)方法を呼び出します。一つの発見がありました。ソースコードは以下の通りです。上のアイコンの赤い部分をパラメータにもう一度パッケージしました。パラメータタイプがListであれば、colleconでlistとして指定しなければならないことが分かりました。データグループであれば、collection属性でarrayとして指定しなければなりません。これで問題が明らかになります。パラメータなら、collectionの値はパラメータの種類によって決まります。複数の値であれば、注釈Paramで指定しない限り、数字の先頭であるため、collectionではどの値を指定しても無駄です。下図はdebug表示結果です。</select>上記のcollectionの値はidsであり、着信パラメータMapのkeyであり、対応するMapperコードである。IN()これはエラーとなりますので、最後にIdsの要素があると判断します。以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。Sitemap🍪このウェブサイトは、あなたが我々のウェブサイトで最高の経験を得ることを確実とするために、クッキーを使います。