とにかく INSERT。
今回も「シンプル」をコンセプトにサンプル作りです。
ということでやること。
基本的に SELECT と同じ。INSERT に変わっても大した違いは無しです。
データベース。
今回もサンプルを作るにあたってはデータベースとして HSQLDB を使っています。
作ったテーブルはこれ。
CREATE TABLE SAMPLE(
    ID  NUMERIC(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">
    <insert id="insertSample" parameterClass="javademo.ibatis.Sample">
        INSERT INTO SAMPLE
        VALUES(
            #id#, #description#)
    </insert>
</sqlMap>
相変わらず見れば何となくわかりそうなものではありますが、しつこくいきます。
最後の仕上げは、コーディング。
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(2L));
sample.setDescription("description");
最後はデータベースアクセス。
今回は INSERT 文を発行するので SqlMapClient の insert(String, Object) を使います。
sqlMap.insert("insertSample", sample);
メソッドの最初の引数には SQL Map ファイルで指定した id を、次の引数にはパラメータとなるオブジェクトを渡します。
このオブジェクトのプロパティの値が SQL Map ファイルに書いた #プロパティ名# と置き換わります。
メソッドの戻り値ではデータベースに追加されたレコードのプライマリキーの値を受け取ることができます。
ただ、これを受け取るにはちょっと手順が必要。今の状態だと null が返ってくるのでとりあえず放置。
最後に実行部分のソースの全貌。
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(2L));
            sample.setDescription("description");
            sqlMap.insert("insertSample", sample);
           
        }catch(Exception e){
            e.printStackTrace();
            System.exit(1);
        }       
    }
}
sqlMaps で INSERT するときのポイント。