PostgreSQL の RETURNING を MyBatis で使う
PostgreSQL 8.2 から INSERT/UPDATE/DELETE の結果を返すことが出来る RETURNING 句が追加されました.
※RETURNINGとしてドキュメントがまとまっているのがversion 9.2からなので、9.2のリンクを掲載
今回はこの RETURNING 句を MyBatis で使ってみたいと思います.
SQL
今回、実現したいステートメントは INSERT/UPDATE の結果と別のテーブルを JOIN して結果を返すというものです.
WITH insert_result AS(
INSERT INTO public.telephone(
cust_unq_id, tel_number)
VALUES ('123456789012', '090-1111-2222')
RETURNING *)
SELECT *
FROM customer INNER JOIN insert_result
ON insert_result.cust_unq_id = customer.cust_unq_id;
RETURNING * を JOIN 句に指定できないかな?と思ったのですが、どうもダメそうだったので WITH 句を使うようにしました.
MyBatis
MyBatis の xml は以下のようになります.
最終的な結果は SELECT 句なので、MyBatis のタグも select になります.
INSERT の部分は MyBatis Generator による自動生成のものを極力流用しています.
あとは SQL の直書きしているだけです.
その気になれば何でも書ける MyBatis の自由度の高さですね.
以上です.