とにかく UPDATE。
今回も「もっとも単純に」のコンセプトを掲げつつざっくりとサンプル作りです。
ということでやらないといけいないこと。
基本的に SELECT と同じ。UPDATE に変わっても大した違いは無いのです。
データベース。
今回サンプルを作るにあたってはデータベースとして HSQLDB を使っています。
作ったテーブルはこれ。
CREATE TABLE SAMPLE(
ID INTEGER(8) NOT NULL,
DESC VARCHAR(200)
)
そしてデータは適当に。
Bean であれば良いのでデータベースにあわせてちょいちょいと作ります。
package javademo.ibatis;
public class Sample{
private Long id;
private String description;
public Long getId(){
return this.id;
}
public void setId(Long id){
this.id = id;
}
public String getDescription(){
return this.description;
}
public void setDescription(String desc){
this.description = desc;
}
}
作成した sqlMapConfig.xml ファイルです。
トランザクションの管理は JDBC。
DataSource の作成には SimpleDataSourceFactory を使うように指定しています。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMapConfig PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN"
"http://www.ibatis.com/dtd/sql-map-config-2.dtd">
<sqlMapConfig>
<transactionManager type="JDBC" >
<dataSource type="SIMPLE">
<property name="JDBC.Driver" value="org.hsqldb.jdbcDriver"/>
<property name="JDBC.ConnectionURL" value="jdbc:hsqldb:hsql://localhost"/>
<property name="JDBC.Username" value="sa"/>
<property name="JDBC.Password" value=""/>
</dataSource>
</transactionManager>
<sqlMap resource="maps/Sample.xml" />
</sqlMapConfig>
簡易なタグの説明を以下ベタ貼り。
以前書いたものをコピペしただけです。
この辺からやっと SELECT 文を発行するときとで違いが出てきます。
作成した Sample.xml ファイルです。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN"
"http://www.ibatis.com/dtd/sql-map-2.dtd">
<sqlMap namespace="Sample">
<update id="updateSample" parameterClass="javademo.ibatis.Sample">
UPDATE SAMPLE SET
DESC=#description#
WHERE ID=#id#
</update>
</sqlMap>
相変わらず見れば何となくわかりそうなものではありますが、しつこくいきます。w
最後の仕上げは、コーディング。
SqlMapClient のメソッドを呼び出して、データベースにアクセスすることになります。
ざっくりとした手順はこんな感じ。
まずは SqlMapClient の取り出しですが、これはおきまりの手順。
Resources クラスと SqlMapClientBuilder を使います。
Reader reader = Resources.getResourceAsReader("maps/sqlMapConfig.xml");
SqlMapClient sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);
次。パラメータになるクラスのオブジェクトを作って値をセットします。
これは普通にやれば OK。
Sample sample = new Sample();
sample.setId(new Long(1L));
sample.setDescription("update sample.");
最後はデータベースアクセス。
今回は UPDATE 文を発行するので SqlMapClient の update(String, Object) を使います。
sqlMap.update("updateSample", sample);
メソッドの最初の引数には SQL Map ファイルで指定した id を、次の引数にはパラメータとなるオブジェクトを渡します。
このオブジェクトのプロパティの値が SQL Map ファイルに書いた #プロパティ名# と置き換わります。
メソッドの戻り値は実際に更新されたレコード数です(今回は受け取ってませんが)。
最後に実行部分のソースの全貌。
package javademo.ibatis;
import java.io.Reader;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.client.SqlMapClientBuilder;
import com.ibatis.common.resources.Resources;
public class Run {
public static void main(String[] args) {
try{
// 準備作業
Reader reader = Resources.getResourceAsReader("maps/sqlMapConfig.xml");
SqlMapClient sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);
// いざ実行
Sample sample = new Sample();
sample.setId(new Long(1L));
sample.setDescription("update sample.");
sqlMap.update("updateSample", sample);
}catch(Exception e){
e.printStackTrace();
System.exit(1);
}
}
}
sqlMaps で UPDATE するときのポイント。
SQL Map ファイルでの parameterClass 属性の指定に関しては SELECT や INSERT、DELETE なんかをする時にも同じ感じで使えるのでお見知りおきを。
ってとこ。