検索
連載

SeasarV2によるDBアクセス機能Seaser Projectの全貌を探る(3)(2/3 ページ)

Seasar(シーサー)は、国内のコミュニティ「The Seasar Project」によって開発が行われているオープンソースプロダクトだ。DI+AOPコンテナとして評価が高いSeasarV2は、J2EE開発の現場にも影響力を持ち始めた。例えば電通国際情報サービスがSeasar Projectを正式に支援することを表明し、2005年6月からは同社による商用サポートサービスが開始されている。本連載では、同プロジェクトの代表的なプロダクトを紹介していく。(編集局)

Share
Tweet
LINE
Hatena

データベースアクセスの実際

 接続先のデータベースとトランザクション制御の方法が設定できましたので、いよいよデータベースに接続してみます。

JDBC APIを利用して接続する例

 ここでは、アプリケーションの内部で直接JDBC APIを利用し、オブジェクトへのマッピングも同時に行う例を紹介します。

 サンプルはシンプルな小遣い帳です。表2に示すとおり、accountdbというデータベースに、実際に使った金額などが記録されるaccountテーブルと、カテゴリを登録しておくcategoryテーブルとを用意しておき、それらにデータを登録したり、またはデータを読み出したりしてみます。

categoryテーブル
フィールド データ型 制約
id INTEGER PRIMARY KEY
name VARCHAR(100) UNIQUE

accountテーブル
フィールド データ型 制約
id INTEGER PRIMARY KEY
id_cat INTEGER FOREIGN KEY REFERENCEScategory(id)
title VARCHAR(200) NOT NULL
amount INTEGER NOT NULL
memo TEXT -
date_create DATE NOT NULL
date_modified DATE NOT NULL
表2 accountdbに作成したテーブル

 まずデータベースへのアクセスを担うDAO(Data Access Object)クラスとインターフェイスを作成します。メソッドはカテゴリごとの金額などを問い合わせるgetAccountByCategoryメソッド、accountテーブルにデータを追加するinsertAccountメソッド、同テーブルのデータを更新するmodifyAccountメソッドとします。実際に作成したインターフェイスをリスト1に示します。また、accountテーブルの1行文のデータを保持するクラスをリスト2に示します。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

 ではgetAccountByCategoryメソッドをどのように実装するのかを見ていきましょう。まずデータベースにアクセスするためのSQLを設定します。ここでは問い合わせ処理ですからSELECT文です。ここではPreparedStatementを利用するため、パラメータの部分を“?”としておきます。SELECT文の途中でAS句を使用しているのは、データ取得時に違うテーブルの同じフィールド名を区別できるようにするためです。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

 その後、これを実行してResultSetを取得するのですが、Connectionオブジェクトは実装クラス(AccountDaoImpl.java)のコンストラクタより注入されたDataSourceから取得します。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

 データベースからデータを取得したら、あとは1行分ずつAccountオブジェクトを生成して、各フィールドのデータをこのオブジェクトのプロパティに設定します。最後はこれをまとめたArrayListオブジェクトを戻り値とすれば、メソッドが完成します。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

 このメソッドの実行例を以下に示します。この中でDEBUG〜とあるのは、S2から自動的に出力されたログです。カレントディレクトリに、S2で用意されているlog4j.propertiesファイルをコピーしておくと、実行時にログが表示されます。このファイルを書き換えるとログの出力先を変更することができます。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

 今度は、INSERTを行うinsertAccountメソッドを実装してみます。SQL文は以下のように設定しておきます。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

 PreparedStatementオブジェクトを用意するところまでは先ほどのメソッドと同じです。その後、各パラメータにAccountオブジェクトのプロパティの値を設定し、SQL文を実行します。これでメソッドの実装ができました。UPDATEを行うメソッドも、これとほぼ同じ要領で実装することができます。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

Copyright © ITmedia, Inc. All Rights Reserved.

ページトップに戻る