iBatisのサブクエリに複数のパラメータを渡す

iBatisで1対多のテーブルからの取得などの場合にサブクエリの指定は次のように行う。

    <result property="history"      column="id"         select="getHist"/>

これで、 getHist のSQL中で id の値は #value# で参照できるようになる。サブクエリに渡す値が一つで足りる場合は問題ないが、複合キーなどの場合に駆動表の複数カラムをgetHist側のSQLで参照したい場合があるこの方式では渡せない。

複数渡したい場合は column部分の記述を次の様にする。

 column="{ 参照名 = DBカラム名 , ... }"

駆動表の id, some を使ってサブクエリを発行する場合次のようになる。

    <result property="history"      column="{value=id,second=some}"         select="getHist"/>

これで、 getHist のSQL中で #value# と #second# が利用できる。

column="id"

という書き方は

column="{value=id}"

のショートカットという風に考えるとスッキリする