図1●Javaのクラスとリレーショナル・データベースのテーブルとの間のギャップを埋めるO/Rマッピング・ツール
図1●Javaのクラスとリレーショナル・データベースのテーブルとの間のギャップを埋めるO/Rマッピング・ツール
[画像のクリックで拡大表示]
表1●オープンソースで提供されている主なO/Rマッピング・ツール
表1●オープンソースで提供されている主なO/Rマッピング・ツール
[画像のクリックで拡大表示]
図2●Hibernateサンプルを動作させるための手順。サンプルは,Windows 2000,J2SE 5.0 Update4,Tomcat 5.5.9,MySQL 4.1.12の環境で動作を確認した
図2●Hibernateサンプルを動作させるための手順。サンプルは,Windows 2000,J2SE 5.0 Update4,Tomcat 5.5.9,MySQL 4.1.12の環境で動作を確認した
[画像のクリックで拡大表示]

 「Javaアプリケーションでデータベース連携といえばJDBC」と思っている方はいませんか。それは一昔前の話です。なるほど,JDBCは最も基本的なデータベース・アクセスの手段です。しかし,JDBCでコーディングをしたことがある方ならば,おそらくこれまでに様々な不都合を感じてきたのではないでしょうか。

 例えば,SQLのSELECT文で抽出した結果セットを扱う場合,フィールド値をいちいちJavaのクラスの変数に割り当てる必要があります。INSERT/UPDATE文を発行する場合はその逆です。Javaのクラスの変数から必要な値を取り出し,SQLクエリーの文字列を動的に組み立てる必要があります。このような作業を「マッピング」といいます。一説によれば,Java+JDBCアプリケーションに占めるマッピングの量は,実にコード全体の4~7割にものぼるといわれています。

 マッピングはとても単純な作業であり,本来のビジネス・ロジックとは関係ない処理です。そうした処理に多くの労力をかけなければならないのは,あまりに無駄です。このような問題を解決してくれるのが,今回紹介する「O/R(Object/Relational)マッピング・ツール」なのです。

オブジェクトとRDBとの間の
ギャップを自動的に埋める

 O/Rマッピング・ツールは,その名の通り,Javaのクラスのプロパティと,テーブル上のフィールドとをマッピングしてくれるツールです。先に述べたように,Javaのクラスとリレーショナル・データベースのテーブルには,構造上の大きなギャップがあります。このようなギャップを「インピーダンス・ミスマッチ」といい,開発生産性を著しく低下させる原因になっています。このミスマッチを自動的に埋めようというのがO/Rマッピングの考え方です。O/Rマッピング・ツールを利用することで,テーブルからプロパティへの値の割り当てが自動化でき,マッピングのためのコードを記述する必要がなくなります(図1[拡大表示])。

 利点はそれだけではありません。データベース内のテーブルをオブジェクトとして扱うことができるため,レコードの挿入や検索などをオブジェクト指向のプログラミングで実現できるようになります。

 つまり「SQLレスのデータベース連携」が可能になるのです。これはコードの再利用性という観点からも好ましいことです。データベースにはそれぞれの製品ごとに方言があります。同じように見えるSQLクエリーも,実はデータベースごとに微妙に仕様が異なっているのです。その点がコードの再利用性を阻害する一因となることも少なくありません。O/Rマッピング・ツールの多くは,マッピング機能とともに,こうした方言を吸収するための仕組みを提供しています。これにより,開発者がデータベースごとの仕様の差を意識する必要がなくなります。

 オープンソースで提供されているO/Rマッピング・ツールには,様々なものがあります(表1[拡大表示])。今回はその中からHibernateを取り上げます。Hibernateは機能性,安定性,パフォーマンスに定評があり,実績のあるO/Rマッピング・ツールです。充実した日本語リファレンスをWebサイト(http://www.hibernate.org/hib_docs/reference/ja/html/)で閲覧できることや,導入が簡単であることも基礎を学びたいユーザーには利点です。

Hibernateが動作する
環境を準備する

 さて,それでは早速,Hibernateが動作する環境を用意しましょう(図2[拡大表示])。JDKとTomcatをインストールしてください*1。データベースを利用するため,MySQLとMySQL用JDBCドライバであるConnector/Jもインストールします。サンプルの「nikkei200510.war」は,日経ソフトウエアのサイト(http://software.nikkeibp.co.jp/)からダウンロードできます。具体的な作業については,筆者のサイト「サーバサイド技術の学び舎-WINGS」(http://www.wings.msn.to/)の「サーバサイド環境構築設定」を参照してください。Hibernateはサンプルの中に含まれているので,特にインストールする必要はありません。自分でセットアップする場合は,カコミ記事「Hibernateのインストール方法」を参照してください。


表A●Hibernateの動作に必要なファイル
[画像のクリックで拡大表示]

Hibernateのインストール方法

 Hibernateを自分でインストールする場合は以下の手順に従ってください。まず,Hibernateのサイト(http://www.hibernate.org/)からアーカイブ「hibernate-3.x.x.zip(x.xはバージョン番号)」をダウンロードしてください。ファイルを解凍すると,「hibernate-3.x.x」というフォルダができます。配下の各フォルダから表Aのように,アプリケーション・ルート(サンプルでは「%CATALINA_HOME%/webapps/nikkei200510」フォルダ)配下の各フォルダに必要なファイルを配置してください。

 ただし,「lib」フォルダ配下の「.jar」ファイルは必ずしもすべて必要であるわけではありません。「lib/_README.txt」に各「.jar」ファイルの役割と必須/任意(Required/Optional)の別が明記されています。使用する機能に応じて配置するものを選択してください。

山田 祥寛(やまだ よしひろ)

千葉県鎌ヶ谷市在住のフリーライター(http://www.wings.msn.to/