CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。
iBatisを使ってINSERTを行う際に、自動採番で採番された情報をINSERTのパラメータとして利用し、 かつ、その採番した値を取得する方法について説明します。 環境は「iBatisでSELECT」と同様ですが、Postgresを利用しているので、自動採番用で利用するシーケンスの作成をしておきます。 CREATE SEQUENCE userid_seqSTART 1000START で1000を指定していますが、ただ単にこれまでINSERTしてきたデータよりも大きい値を設定しておきたかったためです。 「iBatisでINSERT,UPDATE,DELETE」と変わる場所は、マッピングファイルと、実行部分です。 マッピングファイル <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE sqlMap PUBLIC "-//ibatis.apache
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
iBatisでは、insert時にシーケンスなどから採番し、insertしてから、その値を取得する 機能があります。その際に使用するのがselectKey要素です。 以下サンプルです。 [DDL] -- vim: set ts=4 sw=4 et ws is nowrap ft=sql: CREATE TABLE SAMPLE009_TEST_TABLE( id int ,value1 varchar(100) ,primary key(id) ); CREATE SEQUENCE SAMPLE009_SEQ; -- -- サンプルデータ -- insert into SAMPLE009_TEST_TABLE values(SAMPLE009_SEQ.nextval, 'test value-001'); [データクラス] // vim:set ts=4 sw=4 et ws is now
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く