DeptをSQLパラーメータに使用しINSERTする
複数の埋め込みパラメータを使用する場合には、引数にBeanを指定することができます。INSERT文は複数の埋め込みパラメータを指定する典型的な例です。
SqlMap
parameterClass
で指定したBeanを引数にすることができます。#deptno#という表記は、Dept
クラスのdeptno
プロパティを意味します。
JDBCの場合と異なり、埋め込みパラメータを名前で識別することができます。ここで指定する名前は、実行時に指定するBeanのプロパティ名になります。
<!-- 行の追加 --> <insert id="insertDept" parameterClass="examples.dto.Dept"> INSERT INTO DEPT(DEPTNO, DNAME, LOC) VALUES(#deptno#, #dname#, #location#) </insert>
実行プログラム
//Dept
オブジェクトを作成する
Dept dept = new Dept();
dept.setDeptno(50);
dept.setDname("製造部");
dept.setLocation("埼玉");
//INSERT文の実行
//引数として作成済みのdeptを渡す
sqlMap.startTransaction(); //トランザクションの開始
sqlMap.insert("insertDept", dept);
sqlMap.commitTransaction(); //コミット
Dept
オブジェクトを作成し、INSERT文の実行時に引数として渡します。SQL文の定義に従って埋め込みパラメータが設定された上で実行されます。
トランザクションの利用もSqlMapClientから行います。
MapをSQLパラメータに使用しINSERTする
結果をMapで受け取るときと同じように、Mapをパラメータに使用することができます。
SqlMap
<insert id="insertDeptMap" parameterClass="java.util.HashMap"> INSERT INTO DEPT(DEPTNO, DNAME, LOC) VALUES(#deptno#, #dname#, #loc#) </insert>
実行プログラム
//Dept
オブジェクトを作成する
Map map = new HashMap();
map.put("deptno", new Integer(60));
map.put("dname", "品質管理部");
map.put("loc", "神奈川");
//INSERT文の実行
//引数として作成済みのMapを渡す
sqlMap.insert("insertDeptMap", map);
キー名はSQLに定義した埋め込みパラメータの名前に合わせます。
DeptをSQLパラメータに使用しUPDATEする
基本的にINSERTと同じです。
SqlMap
<!-- 行の更新 --> <update id="updateDept" parameterClass="examples.dto.Dept"> UPDATE DEPT SET DNAME = #dname#, LOC = #location# WHERE DEPTNO = #deptno# </update>
実行プログラム
Dept dept = new Dept(); //作成せずにDBから取得してもよい dept.setDeptno(50); dept.setDname("製品製造部"); dept.setLocation("千葉"); //UPDATE文の実行 sqlMap.update("updateDept", dept);
このサンプルはDept
クラスを使用していますが、Mapを使うこともできます。
DeptをSQLパラメータに使用しDELETEする
基本的にはINSERTと同じです。
SQL
パラメータが1つだけなのでBeanを使用していません。1つのSQL
パラメータを埋め込む場合は#value#という文字列を指定します。
SqlMap
<!-- 行の削除 --> <delete id="deleteDept"> DELETE FROM DEPT WHERE DEPTNO = #value# </delete>
実行プログラム
SQL
パラメータの指定はBeanではなく、Integer
オブジェクトで指定しています。
sqlMap.delete("deleteDept", new Integer(50));
まとめ
- SQL文をJavaソースコードから分離することができます
- SQLの埋め込みパラメータを、JDBCよりも分かりやすく指定できます
- 検索結果をオブジェクトに格納する機能が付いています
- Beanを作るのが面倒な場合はMapを利用することができます。
JDBC APIを直に使う場合には、ResultSetやStatementのクローズ処理が煩雑になりますが、iBATISがその手間を省いてくれます。フレームワークの学習に翻弄されることなく、より安全にデータベースアクセスすることができます。
次回は、結果マッピングと動的SQLについて説明したいと思います。