Home > Java | MySQL | iBatis > Sequenceをエミュレート(MySQL+iBatis版)

Sequenceをエミュレート(MySQL+iBatis版)

GeneratedKeyを使う方法は以前書きましたが、今回はiBatisを使った場合の方法です。
1回の命令でシーケンスをエミュレートするやりかたを書いておきます。

まず、iBatisは以下の事が言えます。

  • Insertの時だけSelectKeyで値を返すことができる(Updateの時は戻り値は更新件数)
  • InsertタグでもUpdate文を発行する事は可能
    (JDBCレベルではexecuteUpdateを発行しているため)

これらの事をふまえると、
Insertタグの中にUpdate文を記述して、SelectKeyも併せて書くことでインクリメントした値を返すことができます。

さっそくサンプルを。

シーケンステーブルの準備

CREATE TABLE SEQUENCE (
    NAME VARCHAR(32) NOT NULL,
    SEQ INTEGER NOT NULL,
    CONSTRAINT PK_SEQUENCE PRIMARY KEY(NAME)
) Type=InnoDB;
INSERT INTO SEQUENCE (NAME, SEQ) VALUES('IMGID', 0);

iBatisの設定ファイル

<insert id="GetNextSequence" parameterClass="java.lang.String">
	UPDATE SEQUENCE SET SEQ = LAST_INSERT_ID(SEQ+1) WHERE NAME = #name#
	<selectKey resultClass="int">
		SELECT LAST_INSERT_ID()
	</selectKey>
</insert>

Javaプログラム

int id = (Integer) sqlMap.insert("GetNextSequence", "IMGID");

Comments:1

Comment Form
タムタム 2008年6月 4日 12:45

今気がついたけど、sekectKeyのtype="post"にしないとダメな気がする。デフォルトって"pre"だったような。。

Trackbacks:0

TrackBack URL for this entry
Listed below are links to weblogs that reference
Sequenceをエミュレート(MySQL+iBatis版) from タムタムの日記

Home > Java | MySQL | iBatis > Sequenceをエミュレート(MySQL+iBatis版)

Search
Feeds

Return to page top