はじめに
Dao(Data Access Object)とは、業務システム開発でよく利用されるデータベースアクセスパターンです。本稿では、このDaoの実装に有効な「S2Dao」というO/Rマッピングツールについて紹介します。
対象読者
Javaにて開発を行っていて、データベースプログラミングやO/Rマッピングに興味をある方を対象としています。
必要な環境
このサンプルはJ2SE Development Kit 5.0 Update 6と、オープンソースデータベース「HSQLDB」のバージョン1.7.3にて動作確認をしています。
S2Daoの最新版は、Seasarファウンデーションのホームページからダウンロードすることができます。なお、本稿のサンプルソースには、S2Daoのバージョン1.0.29とS2Daoが必要とするライブラリを同梱しています。
S2Daoの特徴
S2Daoとは、Seasarファウンデーションが開発を進めているオープンソースのO/Rマッピングツールです。S2Daoの主な特徴は次の3つです
ソースコードがシンプル
S2DaoではXMLのマッピングファイルが不要なため、ソースコードの量を減らすことができます。一般的なO/Rマッピングツールではテーブルとクラスを関連づけるための単調なマッピングファイルを書かなければいけませんが、S2Daoではクラスやプロパティの名前を意識して設計することで、ソースコードをシンプルにすることができます。
チューニング・保守を行いやすい
O/Rマッピングツールを利用したシステムでは、まれにパフォーマンスが問題になることがあります。これはO/Rマッピングツールが内部でSQLを生成し実行するためで、データベースの集計関数やチューニング済みのSQLの利用が難しいことが原因です。しかしS2Daoでは、外部ファイルとして用意したSQLを実行させることが可能なため、チューニングを容易に行うことができます。しかも、外部ファイルという性質上、SQLの修正も容易にできます。
テスト・デバッグが簡単
データベースアクセスのプログラムを作るときには、SQL Plus(Oracleのクライントツール)やDatabaseManager(HSQLDBの管理ツール)といったSQL実行環境で作成したSQLを、プログラムに埋め込むことが一般的です。S2Daoでは、作成したSQLをそのまま外部SQLファイルとして使用することができます。パラメータや条件などが必要であればSQLコメント(/*~*/)と呼ばれる仕組みによって対応することができます。さらにS2Daoでは実行したSQL文がログとして出力されます。PreparedStatementにおける「?」は表示されず、実行したSQLがそのまま表示されるため、デバッグも容易に行うことができます。
サンプルアプリケーションの概要
本稿のダウンロードサンプルはシンプルなJavaアプリケーションです。当サンプルを実行する前に、「dbServerStart.bat」をダブルクリックしてHSQLDBのデータベースを起動しておいてください。「サンプル実行.bat」をダブルクリックしてサンプルを実行すると、main
メソッドが呼び出されます。サンプルでは、HSQLDBへの追加・更新・参照・削除といった基本的なデータベースアクセスを行い、その結果をコンソールに出力します。
テーブルの構成
サンプルでは、書籍情報を保持する「Book」テーブルを使用します。レイアウトは次の通りです。
列名 | 型 | 桁数 | 説明 |
ID | 数値型 | 8 | ID(主キー) |
TITLE | 文字列型 | 50 | 書籍名 |
PRICE | 数値型 | 8 | 価格 |
EDITDAY | 日付時刻型 | 8 | 更新日 |
ファイル構成
サンプルアプリケーションのファイル構成は、下図のようになっています。主要なファイルの詳細については、この後で解説していきます。
ファイル名 | 概要 |
Book.java | 「Book」テーブルのデータを格納するEntityクラス |
BookDao.java | 「Book」テーブルを操作するDaoインターフェース |
Main.java | EntityとDaoを使用するクラス |
BookDao.dicon | BookDaoの設定ファイル |
dao.dicon | S2Daoの設定ファイル |
j2ee.dicon | データベースに関する設定ファイル |
log4j.properties | ログ出力に関するlo4jの設定ファイル |