MyBatisの使い方をちょっとメモ
Mapper XML ファイルのselectタブにparameterTypeとresultTypeをセットする。
【parameterType】
プログラムから渡すもので、Sqlの変数部に渡す値の元になるものを指定する。
List、Mapとかこの二つがあれば基本問題ない気がする。
INTとかもいけるらしいが、やっていない。
Listをセットした場合、変数側をforeachで処理することになるが、
この時はcollectionにlistと記載して、itemと変数を合わせる。
Mapの場合は、collectionにkeyを指定して、バインド変数をvalue.item等で処理する。
・Listの例
<select id="test" parameterType="List" resultType="dto">
SELECT *
FROM test
WHERE id in
<foreach collection="list" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</select>
MAPの場合、foreachは関係ないので、MAPのkeyを変数と合わせる。
MAPをListにして渡すとちょっとややこしい・・、でもないかw
MapListにセットしているMap名が必要で、ここではmap
<select id="test" parameterType="List" resultType="dto">
SELECT *
FROM test
WHERE id in
<foreach collection="list" item="hogeMap" open="(" separator="," close=")">
#{map.item}
</foreach>
</select>
こんな感じで、itemにmap名、変数部はmap.keyを書く。
では、MAPにMAPのListをもっていたらっ!
<select id="test" parameterType="Map" resultType="dto">
SELECT *
FROM test
WHERE id in
<foreach collection="hogeMaplist" item="hogeMap" open="(" separator="," close=")">
#{hogeMap.item}
</foreach>
</select>
【注意】
パラメータの内部構造が多段になっている場合は、collectionやitm名を指定する必要があるっ。
【resultType】
ここは受け取る型を記載、MAPとかDTOとか。
DTOの場合、エイリアスを使用しないならパッケージを含めたフルパス.DTOって感じ。
Listで受け取る場合は、Listではなく、LISTの型LongとかStringとかを記載する。
【注意】
dtoの場合にはresultMapでList等はresultTypeです。
補足:
バインド変数にしていできる#、$。
#{item}とか$ {item}とか、#は、'(シングルクォート)を自動で付与。
$はそのままの値で処理。