TOPシステム開発> データ照会方式の比較




徹底比較!!Ruby on Rails vs Javaフレームワーク
徹底比較!!Ruby on Rails vs Javaフレームワーク

第1回:O/Rマッピング

著者:アスタリクス  大西 正太   2006/8/23
前のページ  1  2  3  4
データ照会方式の比較

   さて次にマッピングされたオブジェクトを用いてデータ照会する方式を比較していきましょう。
ActiveRecordのデータ照会

   ActiveRecordでデータを照会する場合、表4に示した「find_by_*」「find」「SQL直接」という3つの方法を組み合わせて用います。これらの方法の中で特筆すべきは「find_by_*」メソッドでしょう。

   例えば下記のようにメソッド呼び出しすることで、nameが「旭山」、addressが「北海道」のレコードを照会できます。

Zoo.find_by_name_and_address('旭山', '北海道')

   すばらしいのは、この「find_by_*」メソッドはクラスに宣言することなく呼び出せることです。ActiveRecordがメソッド名を自動で解釈して、動的にクエリが生成・発行されているからです。

   また表4に示す3つの方法はいわゆる80:20の法則に従って利用するイメージになります。

記述量 データ照会方法 用いるタイミング
find_by_* シンプルな照会をしたい場合
find JOINが絡むなどある程度複雑な照会をしたい場合
SQL直接 副問い合わせなどRDBの力をフルに発揮したい場合

表4:ActiveRecord提供のデータ操作

   つまり、80%の状況では「find_by_*」を用いて簡単にデータを照会するだけで済みます。残りの20%の中のさらに80%の場合はfindメソッドを用います。さらにどうしてもうまくはまらない残り20%の中の20%の場合だけ、SQLを直接用いるのです。

   こうすることで、機能を減らさずに全体のコード量の削減が実現されています。


JPAのデータ照会

   JPAでは表5に示す「JPQL」「SQL直接」という2つの照会方法が提供されます。

記述量 データ照会方法 用いるタイミング
JPQL 基本的には利用
SQL直接 副問い合わせなどRDBの力をフルに発揮したい場合

表5:JAP提供のデータ操作機能

   JPQLとは従来EJBQLと呼ばれていたSQLライクな言語で、照会文字列を作成し問い合わせると直接オブジェクトが取得できる、というものです。JPAでもSQLをそのまま発行することができるので、ActiveRecordと同様に効果的な活用ができます。


Hibernateのデータ照会

   Hibernateでは表6に示す「HQL」「Criteria」「SQL直接」という3つの照会方法が提供されています。これまで解説したActiveRecord、JPAと同様に、SQLはRDBの力をフルに発揮したい場合にのみスポットで用いると効果的です。

記述量 データ照会方法 用いるタイミング
HQL Criteriaを使わないなら基本的に利用
Criteria HQLを使わないなら基本的に利用
SQL直接 副問い合わせなどRDBの力をフルに発揮したい場合

表6:Hibernate提供のデータ操作機能

   HQLはJPQLとほぼ同じ思想に基づいたものです。Criteriaはオブジェクトベースで問い合わせ内容を記述します。SQLライクなHQLなどに比べると扱いに多少慣れが必要ですが、2つの言語が入り混じることがないため可読性が比較的高くなり、また動的な照会などに対応しやすくなります。

   HQLとCriteriaは表現方法が異なるだけで役割的に重なるため、開発全体でいずれかを選択して用いることが多いでしょう。


データ照会方式の比較結果

   各製品とも複数の照会方法を提供しているため、それらを補完的に活用することができます。

   ただし、Java陣営のフレームワークではパフォーマンス向上が補完活用の目的です。ActiveRecordでは加えて「find_by_*」メソッドによる生産性向上も実現しています。


終わりに

   いかがだったでしょうか。全体をまとめると「記述量削減重視のRails」「拡張性、柔軟性重視のJava」といったところでしょうか。次回以降の連載で明らかにしていきますが、これはO/Rマッピングに限らず全体的な傾向といえるでしょう。

   ただしHibernateに比べるとJPAの方が記述量を削減しているのを見てわかるように、JavaもEoD(Ease of Development)を標語に掲げ、生産性の向上を進めています。また、今回は比較対象にしていませんが国産Javaフレームワーク「Seasar2」では、先に紹介した「find_by_*」に近い機能をアノテーションベースで実現しています(S2DAOのARGSアノテーション)。

   現在は革新的であるRailsもオープンソース時代のスピードにかかればあっという間に「普通の」フレームワークになるのかもしれません。しかし直接的/間接的にお互い影響を与え合ってアプリケーションフレームワーク全体が進歩していくのはすばらしいことではないでしょうか。

   さて次回はプレゼンテーションフレームワークを比較していきます。

前のページ  1  2  3  4


デル株式会社
著者プロフィール
株式会社アスタリクス  大西 正太
JavaEEフレームワークの設計構築や開発プロセス策定などの業務を経て、現在は新規ビジネス創生に携わる。Ruby on Rails上に構築したオープンソースのCMS「Rubricks」(http://rubricks.org/)のコミッタ。


INDEX
第1回:O/Rマッピング
  はじめに
  アーキテクチャの比較結果
  Hibernateのマッピング記述
データ照会方式の比較