iBATIS2の動的SQL <iterate> は、mybatis3 になると廃止され
代わりに <foreach> が用意されてる。使い方はほとんど同じだが
動的valueの記述を item="xxx" で定義するようになり少し書きやすくなってる。
<select id="selectCustomer" resultType="sample.Customer"
parameterType="コレクション kanalistを 要素名としてもつクラス">
select * from CUSTOMER
where substr(KANANAME,1,1) in
<foreach item="item" open="(" close=")" collection="kanaList"
separator=",">
#{item}
</foreach>
</select>
=============================
collection="kanaList" と指定したら、SqlSession#selectList の引数Object に、
java.util.Collection を返す対応するgetter名メソッド用意したインスタンスを
渡すか、もしくは、public フィールドで宣言した、
public List<String> kanaList;
でリスト要素が格納されたインスタンスを渡せば良い。
Oracle ADF + EJB と違ってわざわざ、setter, getter でなくても良いところが便利である。
import java.util.ArrayList;
import java.util.List;
/**
* SqlSession#selectList に渡すパラメータ
*/
public class KanaParam{
public List<String> kanaList;
public KanaParam(){
this.kanaList = new ArrayList<String>();
}
// public List<String> getKanaList(){
// return this.kanaList;
// }
// public void setKanaList(List<String> kanaList){
// this.kanaList = kanaList;
// }
public void addKana(String kana){
this.kanaList.add(kana);
}
}
============================================
コメントのように↑setter, getter を省略もできる。
KanaParam kanaParam = new KanaParam();
kanaParam.addKana("ア");
kanaParam.addKana("イ");
kanaParam.addKana("ウ");
List<?> clist = sqlsession.selectList("searchCustomer",kanaParam);