SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

iBATISを使ったO/RマッピングによるDBアクセスの実例

iBATISを使ったO/RマッピングによるDBアクセスの実例

iBATISの紹介とサンプルコード

  • X ポスト
  • このエントリーをはてなブックマークに追加

ダウンロード サンプルソース (8.0 KB)

DeptをSQLパラーメータに使用しINSERTする

 複数の埋め込みパラメータを使用する場合には、引数にBeanを指定することができます。INSERT文は複数の埋め込みパラメータを指定する典型的な例です。

SqlMap

 parameterClassで指定したBeanを引数にすることができます。#deptno#という表記は、Deptクラスのdeptnoプロパティを意味します。

 JDBCの場合と異なり、埋め込みパラメータを名前で識別することができます。ここで指定する名前は、実行時に指定するBeanのプロパティ名になります。

SqlMap-Dept.xmlの抜粋
<!-- 行の追加 -->
<insert id="insertDept" parameterClass="examples.dto.Dept">
    INSERT INTO DEPT(DEPTNO, DNAME, LOC)
    VALUES(#deptno#, #dname#, #location#)
</insert>

実行プログラム

Sample04_Insert.javaの抜粋
//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

SqlMap-Dept.xmlの抜粋
<insert id="insertDeptMap" parameterClass="java.util.HashMap">
    INSERT INTO DEPT(DEPTNO, DNAME, LOC)
    VALUES(#deptno#, #dname#, #loc#)
</insert>    

実行プログラム

Sample05_InsertMap.javaの抜粋
//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

SqlMap-Dept.xmlの抜粋
<!-- 行の更新 -->
<update id="updateDept" parameterClass="examples.dto.Dept">
    UPDATE DEPT SET DNAME = #dname#, LOC = #location#
    WHERE DEPTNO = #deptno#
</update>

実行プログラム

Sample06_Update.javaの抜粋
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

SqlMap-Dept.xmlの抜粋
<!-- 行の削除 -->
<delete id="deleteDept">
    DELETE FROM DEPT WHERE DEPTNO = #value#
</delete>

実行プログラム

 SQLパラメータの指定はBeanではなく、Integerオブジェクトで指定しています。

Sample07_Delete.javaの抜粋
sqlMap.delete("deleteDept", new Integer(50));

まとめ

  • SQL文をJavaソースコードから分離することができます
  • SQLの埋め込みパラメータを、JDBCよりも分かりやすく指定できます
  • 検索結果をオブジェクトに格納する機能が付いています
  • Beanを作るのが面倒な場合はMapを利用することができます。

 JDBC APIを直に使う場合には、ResultSetやStatementのクローズ処理が煩雑になりますが、iBATISがその手間を省いてくれます。フレームワークの学習に翻弄されることなく、より安全にデータベースアクセスすることができます。

 次回は、結果マッピングと動的SQLについて説明したいと思います。

次の記事

参考資料

修正履歴

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
iBATISを使ったO/RマッピングによるDBアクセスの実例連載記事一覧

もっと読む

この記事の著者

佐々木孝(ササキタカシ)

Javaをメインに業務システムの開発サポート、パッケージ開発、および技術研究をしています。 

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/1289 2007/07/10 16:53

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング