mybatis foreach CollectionのList、Array、Map
5525 ワード
mybatisのforeach公式ドキュメント解釈:IN条件文を構築する際に使用される集合を巡回する.たとえば
SELECT * FROM POST P WHERE ID in #{item}
foreach要素の機能は非常に強力で、要素内で使用できる集合項目(item)とインデックス(index)変数を宣言する集合を指定できます.また、先頭と末尾の文字列を指定し、反復結果の間に区切り記号を配置することもできます.この要素はインテリジェントなので、余分な区切り文字を偶然追加することはありません.
注意:
リスト、Setなどの反復可能なオブジェクト、Mapオブジェクト、または配列オブジェクトを集合パラメータとしてforeachに渡すことができます.反復可能なオブジェクトまたは配列を使用する場合、indexは現在の反復の回数であり、itemの値は今回の反復で取得された要素である.Mapオブジェクト(またはMap.Entryオブジェクトのセット)を使用する場合、indexはキー、itemは値です.
foreach要素の属性は主にitem,index,collection,open,separator,closeである.
foreachを使用する場合、最も重要なのはcollectionプロパティです.このプロパティは指定する必要がありますが、場合によっては値が異なります.主に3つのケースがあります.
1.単一パラメータでパラメータタイプがリストである場合、collection属性値はlist 2となる.単一パラメータでパラメータタイプがarray配列である場合、collectionのプロパティ値はarray 3になります.入力がParam修飾(@Param("ids")List ids)の場合、collectionの属性値はids 4となる.入力されたパラメータが複数の場合は、Mapにカプセル化する必要があります.もちろん、単一のパラメータでもいいです.
mapにカプセル化します.実際にパラメータを入力すると、breastでもmapにカプセル化されます.mapのkeyはパラメータ名です.このときcollection属性値は、入力したリストまたはarrayオブジェクトが自分のカプセル化したmapのkeyの下で、上記の3つのケースのサンプルコードを見てみましょう.
単一パラメータリストのタイプ:
java: public int dynamicForeachList(List ids);
DELETE FROM s_user WHERE id in ids"open="("separator=","close=")"> #{ids}
DELETE FROM s_user WHERE id in list"open="("separator=","close=")"> #{ids}
@Param("ids")を使用してパラメータ名を指定することもできます.これにより、以下のように自分のlist名を使用することができます.
これは正しい.
単一パラメータarray配列のタイプ:
同様にcollectionプロパティの値に注意してください:array
自分でパラメータをMapのタイプにカプセル化する
注意:入力パラメータは単一のList、Array、Mapであり、入力されたオブジェクトまたはmapの場合、リストまたはarrayの属性がある場合、colletion=「属性名」である.
java: class example{ List subCodes; }
sql: and s.Code in ${subCode}
その他の例:
1、List InList、List strListの集合には基本タイプが格納されている
その中の伝達パラメータはList集合であるためcollectionの値はlistを直接使用して代替され、indexはこの集合が遍歴するインデックス値であり、itemはlistの現在のインデックス位置の値openとcloseがペアで現れ、開始と終了の記号であり、separatorはセパレータである.
2、List objList、List userListリファレンスタイプのデータ
このクラスを例にとると、
java: public int dynamicForeachList(List uusers);
ループ挿入
Listとarrayは似ています.
次にmapの遍歴を見てみましょう.
sqlSession.selectList(" getByMap", foreachMap);
その中のforeachMapは伝達するMap集合indexはmapのkey itemはmapのvalueです
mapは、次の方法で巡回することもできます.
1、循環key:
2、循環values
3、循環取得keyと値:
${k}=#{condition[${k}]}はmybatis 3ではあまり使いにくい.3で${k}=#{condition.${k}}に変更すると使いやすい
ここまでは終わりましたが、ちょっと言いたいことがあります.それはinの遍歴です.一般的にはforeachを使って組み立てられていますが、このように書かれています.
String name ="'w1','w2','w3','w4'";
これが自分でinを組み立てた文字列で、mybatisのforeachを使わずに組み立てたのは同じです.
SELECT * FROM POST P WHERE ID in #{item}
foreach要素の機能は非常に強力で、要素内で使用できる集合項目(item)とインデックス(index)変数を宣言する集合を指定できます.また、先頭と末尾の文字列を指定し、反復結果の間に区切り記号を配置することもできます.この要素はインテリジェントなので、余分な区切り文字を偶然追加することはありません.
注意:
リスト、Setなどの反復可能なオブジェクト、Mapオブジェクト、または配列オブジェクトを集合パラメータとしてforeachに渡すことができます.反復可能なオブジェクトまたは配列を使用する場合、indexは現在の反復の回数であり、itemの値は今回の反復で取得された要素である.Mapオブジェクト(またはMap.Entryオブジェクトのセット)を使用する場合、indexはキー、itemは値です.
foreach要素の属性は主にitem,index,collection,open,separator,closeである.
item ,
index , , ,
open ,
separator ,
close 。
foreachを使用する場合、最も重要なのはcollectionプロパティです.このプロパティは指定する必要がありますが、場合によっては値が異なります.主に3つのケースがあります.
1.単一パラメータでパラメータタイプがリストである場合、collection属性値はlist 2となる.単一パラメータでパラメータタイプがarray配列である場合、collectionのプロパティ値はarray 3になります.入力がParam修飾(@Param("ids")List ids)の場合、collectionの属性値はids 4となる.入力されたパラメータが複数の場合は、Mapにカプセル化する必要があります.もちろん、単一のパラメータでもいいです.
mapにカプセル化します.実際にパラメータを入力すると、breastでもmapにカプセル化されます.mapのkeyはパラメータ名です.このときcollection属性値は、入力したリストまたはarrayオブジェクトが自分のカプセル化したmapのkeyの下で、上記の3つのケースのサンプルコードを見てみましょう.
単一パラメータリストのタイプ:
java: public int dynamicForeachList(List ids);
DELETE FROM s_user WHERE id in ids"open="("separator=","close=")"> #{ids}
DELETE FROM s_user WHERE id in list"open="("separator=","close=")"> #{ids}
@Param("ids")を使用してパラメータ名を指定することもできます.これにより、以下のように自分のlist名を使用することができます.
java:
public int dynamicForeachList(@Param("ids")List ids);
sql:
DELETE FROM s_user
WHERE id in
#{ids}
これは正しい.
単一パラメータarray配列のタイプ:
同様にcollectionプロパティの値に注意してください:array
java:
public List dynamicForeachArray(int[] ids);
sql:
自分でパラメータをMapのタイプにカプセル化する
java
public List dynamicForeachMap(Map params);
sql
注意:入力パラメータは単一のList、Array、Mapであり、入力されたオブジェクトまたはmapの場合、リストまたはarrayの属性がある場合、colletion=「属性名」である.
java: class example{ List subCodes; }
sql: and s.Code in ${subCode}
その他の例:
1、List InList、List strListの集合には基本タイプが格納されている
その中の伝達パラメータはList集合であるためcollectionの値はlistを直接使用して代替され、indexはこの集合が遍歴するインデックス値であり、itemはlistの現在のインデックス位置の値openとcloseがペアで現れ、開始と終了の記号であり、separatorはセパレータである.
2、List objList、List userListリファレンスタイプのデータ
package soufun.com;
public class Users {
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
このクラスを例にとると、
java: public int dynamicForeachList(List uusers);
ループ挿入
insert into t_blog(id,name) values
(#{item.id},#{item.name})
Listとarrayは似ています.
次にmapの遍歴を見てみましょう.
HashMap foreachMap= new HashMap();
map.put("name1", "www1");
map.put("name2", "www2");
map.put("name3", "www3");
map.put("name4", "www4");
map.put("name5", "www5");
map.put("name6", "www6");
sqlSession.selectList(" getByMap", foreachMap);
その中のforeachMapは伝達するMap集合indexはmapのkey itemはmapのvalueです
mapは、次の方法で巡回することもできます.
1、循環key:
${k} = #{k}
2、循環values
${v} = #{v}
3、循環取得keyと値:
${k} = ${condition[k]}
${k}=#{condition[${k}]}はmybatis 3ではあまり使いにくい.3で${k}=#{condition.${k}}に変更すると使いやすい
ここまでは終わりましたが、ちょっと言いたいことがあります.それはinの遍歴です.一般的にはforeachを使って組み立てられていますが、このように書かれています.
String name ="'w1','w2','w3','w4'";
これが自分でinを組み立てた文字列で、mybatisのforeachを使わずに組み立てたのは同じです.