Shoeisha Technology Media

CodeZine(コードジン)

特集ページ一覧

S2Dao.NETでXMLレスなO/Rマッピングを行う

S2Dao.NETを用いて生産性・パフォーマンスの高いDaoを構築する

  • LINEで送る
  • このエントリーをはてなブックマークに追加

S2Dao.NETを使ったO/Rマッピングは、コードがシンプルな上に、O/Rマッピングを定義するXMLを書く必要もありません。本稿はS2Dao.NETのサンプルソースを使いながら、DBを操作するプログラミングの解説をしていきます。

目次

はじめに

 データアクセスを簡単にする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マッピングツール(NHibernateiBATIS.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開発に不慣れなユーザーでも容易にデータアクセスするプログラムを書けるようになります。

 それでは、サンプルコードを見ていきましょう。

参考
 「Dao(Data Access Object)」とは、業務システム開発でよく利用されるデータソースへのアクセスパターンで、J2EEアクセスパターンの1つとして定義されています。リソース(RDBMS、XMLなど)の相違を吸収し、利用者にシンプルなデータ操作インターフェイスを提供します。

サンプルアプリケーションの概要

 本稿のダウンロードサンプルはシンプルなコンソールアプリケーションです。S2DaoSample.slnをダブルクリックしてソリューションを起動したら、[デバッグ]メニューの[デバッグ開始]からアプリケーションを起動してください。メッセージとSQLが表示され、データが更新されます。

テーブルの構成

 サンプルでは、書籍情報を保持する「Book」テーブルを使用します。レイアウトは次のとおりです。

テーブルレイアウト
列名桁数説明
ID数値型8ID(主キー)
TITLE文字列型50書籍名
PRICE数値型8価格
EDIT_DATE日付時刻型8更新日

ファイル構成

 サンプルアプリケーションのファイル構成は、下図のようになっています。主要なファイルの詳細については、この後で解説していきます。

ファイル構成
ファイル構成
サンプルアプリケーションの主要ファイル説明
ファイル名概要
Program.csEntityとDaoを使用するクラス(Mainメソッド)
Book.cs「Book」テーブルのデータを格納するEntityクラス
IBookDao.cs「Book」テーブルを操作するDaoインターフェイス
IBookDao_GetBetweenPrice.sqlSQLを定義したテキストファイル
Dao.diconDaoの登録ファイル
Tx.diconトランザクション/接続先の設定(mdbを指定)
Ado.diconデータベースに関する設定ファイル(OLE DBプロバイダを指定)
App.configアプリケーション構成ファイル(Seasar/log4netの設定)

S2Dao.NETのコーディング手順

 それではS2Dao.NETを使ったプログラムについて紹介していきます。S2Dao.NETでは、次の手順でアプリケーションを作成していきます。

  1. Entityの作成「Book.cs」
  2. Daoの作成「IBookDao.cs」
  3. Daoの登録「Dao.dicon」
  4. EntityとDaoの利用「Program.cs」

 主要クラスの概要について下図に整理しましたので、必要に応じて確認してください。

主要クラスの概要
主要クラスの概要

 それでは、手順に沿って説明していきましょう。


  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

  • WINGSプロジェクト 青木 淳夫 (株式会社ネクストスケープ)(アオキ アツオ)

    <WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂...

  • 山田 祥寛(ヤマダ ヨシヒロ)

    静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for ASP/ASP.NET。執筆コミュニティ「WINGSプロジェクト」代表。 主な著書に「入門シリーズ(サーバサイドAjax/XMLD...

All contents copyright © 2005-2018 Shoeisha Co., Ltd. All rights reserved. ver.1.5