iBatis の SQL 文の IN 句の引数に配列を渡す方法。
スポンサーリンク
ちょっとハマったので、メモを残しておきます。
最終的に以下のような SQL 文を発行したい場合、、、
SELECT column_a FROM table_b WHERE column_c IN ('1','2','3')
iBatis の SQL マップはこんな感じで定義して、、、
<select id="selectA" parameterClass="java.util.Map" resultClass="java.util.ArrayList">
SELECT column_a FROM table_b
<iterate property="cList" prepend="WHERE column_c IN" open="(" close=")" conjunction="," >
#cList[]#
</iterate>
</select>
パラメータとして渡すマップはこんな感じでコーディングすれば良い。
List cList = new ArrayList();
cList.add("1");
cList.add("2");
cList.add("3");
Map parameterMap = new HashMap();
parameterMap.put("cList", cList);
"#"で囲まれた変数名に"[]"を付けるのがポイント。
記憶を頼りに書いているだけで動作確認していないけど、これで行けるはず。
参考資料:
- iBATISを使ったO/RマッピングによるDBアクセスの実例 (2/3):CodeZine(コードジン) (2007/6/7)
- iBATISを使ったO/RマッピングによるDBアクセスの実例 2 (2/2):CodeZine(コードジン) (2007/7/5)
- iBATIS - User - Java - How to prepare a parameter map with an List property? (2008/11/5)
- Viviの部屋 - マッピングXMLの記述-iBatis-PukiWiki (2009/3/19)
- java - How to use an IN clause in iBATIS? - Stack Overflow (2009/10/28)