MyBatisのIN句で配列を使う方法
最近Java触ってます、Springフレームワーク+Mybatisを使用して開発をしていたのですが、Mybatisにハマって闇落ち、魔女化しそうになったのでメモ。Mybatisってなんぞやーって人はいないと思いますが、一応軽く説明を
MyBatis はJavaならびに.NET Frameworkで利用可能な、XMLまたはアノテーションを用いてストアドプロシージャやSQL文をオブジェクトと紐付ける永続性フレームワークである。Apache License 2.0によるオープンソースソフトウェアとして提供されている。
以前はiBATISとして知られていた。
MyBatisはよく使うであろうORマッパーとは違い、SQLとオブジェクトをマッピングするので、SQLをゴリゴリ書きたい人には良いものです、まぁそこでハマって闇落ちしそうになっているんですけどね・・・
やりたかった事
SpringでMyBatisのIN句に配列を渡して以下のようなSQLを叩きたかった。
SELECT column_a FROM table_b WHERE column_c IN ('1','2','3')
ハマったエラー
not found・・・定番ですよね、型が違うんだよね、分かるよ(わからん)
Parameter 'arrayList' not found. Available parameters are [array]
解決策
パラメーターとしてこのように渡す事で解決しました。
arrayList(なんか配列) Map<String, Object> params = new HashedMap<>(); params.put("arrayList", arrayList);
※この時arrayListを直接渡すとエラーになる(これにはまりました)
一度Mapを作成して渡したらうまくいきました。
MyBatisのSQLマップは以下のように書く
<select id="selectHoge" resultType="返却値の型"> select column_a from table_b where column_c in <foreach item="item" collection="arrayList" open="(" separator="," close=")"> #{item} </foreach> </select>
もっといい方法があったら教えてください。
とりあえずメモ。
コメント