はじめに
データアクセスを簡単にするO/Rマッピングライブラリやテーブルアダプタを採用しているにも関わらず、「設定ファイルを書くことが大変だ」「自動生成されたソースが複雑だ」などと感じたことはことはありませんか? 本稿では、コードがシンプルで、マッピングを定義するXMLファイルも書かなくてよい「S2Dao.NET」という新しいO/Rマッピングライブラリについて紹介します。
対象読者
.NET開発者。データベースプログラミングやO/Rマッピングに興味をある方を対象としています。
必要な環境
このサンプルはVisual Studio 2005で作成し、.NET Framework 2.0で動作確認をしています。データベースはMicrosoft Access(MDB)を使用しています。本稿ではC#にて解説をしていますが、VisualBasicのソースコードもダウンロードできます。
S2Dao.NETの最新版は、Seasarプロジェクトのホームページからダウンロードすることができます。なお、本稿のダウンロードサンプルには、S2Dao.NET 1.0.2とその依存ライブラリを同梱しています。
S2Daoの特長
S2Daoは、もともとはJava環境で動作するオープンソースのO/Rマッピングライブラリです。S2Dao.NETは、このS2Daoを.NET Framework環境で動作するように移植したライブラリで、2006年9月に正式版がリリースされました。
S2Dao.NETの主な特長は次の3つです。
ソースコードがシンプル
S2Dao.NETでは、クラス(Class)を作成せずに、インターフェイス(Interface)だけを作成すればデータベースにアクセスできます。つまり、ロジックを記述せずに、メソッド名/引数/戻り値を定義すればO/Rマッピングを実現できます。
さらに、XMLのマッピングファイルも不要です。一般的なO/Rマッピングツール(NHibernateやiBATIS.NET)では、テーブルとクラスを関連づけるための単調なマッピングファイルを書かなければいけませんが、S2Dao.NETではクラスやプロパティの名前を意識して設計すれば、マッピング設定を明示する必要はありません。そのため、ソースコードをシンプルにすることができます。
チューニングが容易
O/Rマッピングライブラリを利用すると、まれにパフォーマンスが問題になることがあります。これはO/Rマッピングライブラリが内部で生成したSQLを実行するためで、データベースの集計関数やチューニング済みのSQLの利用が難しいことが原因です。しかしS2Dao.NETでは、カスタム属性(Attribute)を利用して、メソッドごとに実行させたいSQLを指定できるため、チューニングを容易に行うことができます。
SQLの作成/テストが簡単
データベースにアクセスするプログラムを作るときには、SQL Server Management Studio Express(SQL Serverの管理ツール)や、SQL Plus(Oracleのクライントツール)といったSQL実行環境でテストしたSQLをプログラムに埋め込むことが一般的です。S2Dao.NETでは、作成したSQLをプレースホルダ(「?」や「@」)に置き換えることなく、そのままメソッドに適用することができます。さらに、実行したSQLがそのままログとして表示されるため、デバッグを容易に行うことができます。
もちろん、他のO/Rマッピングツールと同様に、ADO.NETのコードを書く必要もありませんので、.NET開発に不慣れなユーザーでも容易にデータアクセスするプログラムを書けるようになります。
それでは、サンプルコードを見ていきましょう。
サンプルアプリケーションの概要
本稿のダウンロードサンプルはシンプルなコンソールアプリケーションです。S2DaoSample.slnをダブルクリックしてソリューションを起動したら、[デバッグ]メニューの[デバッグ開始]からアプリケーションを起動してください。メッセージとSQLが表示され、データが更新されます。
テーブルの構成
サンプルでは、書籍情報を保持する「Book」テーブルを使用します。レイアウトは次のとおりです。
列名 | 型 | 桁数 | 説明 |
ID | 数値型 | 8 | ID(主キー) |
TITLE | 文字列型 | 50 | 書籍名 |
PRICE | 数値型 | 8 | 価格 |
EDIT_DATE | 日付時刻型 | 8 | 更新日 |
ファイル構成
サンプルアプリケーションのファイル構成は、下図のようになっています。主要なファイルの詳細については、この後で解説していきます。
ファイル名 | 概要 |
Program.cs | EntityとDaoを使用するクラス(Mainメソッド) |
Book.cs | 「Book」テーブルのデータを格納するEntityクラス |
IBookDao.cs | 「Book」テーブルを操作するDaoインターフェイス |
IBookDao_GetBetweenPrice.sql | SQLを定義したテキストファイル |
Dao.dicon | Daoの登録ファイル |
Tx.dicon | トランザクション/接続先の設定(mdbを指定) |
Ado.dicon | データベースに関する設定ファイル(OLE DBプロバイダを指定) |
App.config | アプリケーション構成ファイル(Seasar/log4netの設定) |
S2Dao.NETのコーディング手順
それではS2Dao.NETを使ったプログラムについて紹介していきます。S2Dao.NETでは、次の手順でアプリケーションを作成していきます。
- Entityの作成「Book.cs」
- Daoの作成「IBookDao.cs」
- Daoの登録「Dao.dicon」
- EntityとDaoの利用「Program.cs」
主要クラスの概要について下図に整理しましたので、必要に応じて確認してください。
それでは、手順に沿って説明していきましょう。