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 の自由度の高さですね.

 

以上です.