とにかく DELETE。
今回も「シンプル」をコンセプトにサンプル作りです。
ということでやること。
基本的に SELECT と同じ。DELETE に変わっても大した違いは無しです。
データベース。
今回もサンプルを作るにあたってはデータベースとして HSQLDB を使っています。
作ったテーブルはこれ。
CREATE TABLE SAMPLE(
ID NUMERIC(8) NOT NULL,
DESC VARCHAR(200)
)
なんか HSQLDB のバージョン上げてみたら CREATE 文が動かなくなってたので SELECT や UPDATE のとは少し変えています。
削除のキーとなる項目が渡せればいいのでクラスを作るほどのことは無いのですが、なんとなく流れで。
データベースにあわせてちょいちょいと作ります。
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">
<delete id="deleteSample" parameterClass="javademo.ibatis.Sample">
DELETE FROM SAMPLE
WHERE ID=#id#
</delete>
</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));
最後はデータベースアクセス。
今回は DELETE 文を発行するので SqlMapClient の delete(String, Object) を使います。
sqlMap.delete("deleteSample", 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));
sqlMap.delete("deleteSample", sample);
}catch(Exception e){
e.printStackTrace();
System.exit(1);
}
}
}
sqlMaps で DELETE するときのポイント。