類似RDB/SQL系技術との対応関係。
  類似RDB/SQL系技術との対応関係を以下に示します(順不同です)。

  プロダクト | 筆者視点の特徴
  --- | ---
  woolpack.sql 0.07 | DBメタ情報の管理・クエリ生成・DB値バインド・DB値取得・トランザクション分離機構をテンプレート化しており、 これらをコンポジットとして組み立てます。
  S2DAO 1.0.40 | スタティックフィールド、Tiger(Java5)アノテーションを使用してDBカラム-Beanプロパティの対応を定義することができます。 バインド変数コメント付きSQLで値のバインドや動的SQLを定義することができます。 Seasar2のバイトコード加工技術によるトランザクション制御機構を使用することができ、 XML定義ファイルを使用してトランザクション基点をAOPする位置を定義します。 (http://s2dao.seasar.org/ja/index.html)
  iBatis 2.2.0 | DBカラム-Beanプロパティ対応表とSQLをXMLに記載します。 業務クラスからは文字列キーでDBアクセス用オブジェクトを取得します。 XMLをベースとするDSLで動的SQLを定義することができます。 独自のインタフェース(SqlMapTransactionManager)やクラス(DaoManager)を使用して クライアントソースにbefore-afterパターンを定義してトランザクションを制御します。 設定ファイルとDAO、DTOクラスファイルをGUIを操作して生成することができます。 (http://ibatis.apache.org/)
  ObjectRelationalBridge(OJB) 1.0.4 | XDocletアノテーションを使用してDBカラム-Beanプロパティの対応を定義することができます。 検索条件を組み立てるためにビルダーパターンを使用することができます。 PersistenceBroker API、ODMG API、JDO、OTM(Object Transaction Manager)の各永続化APIを使用することができ、 クライアントソースにbefore-afterパターンを定義してトランザクションを制御します。 (http://db.apache.org/ojb/)
  Commons DBUtils 1.1 | ResultSetHandlerはWoolpackのFnと同等の役割を持ちます。 (http://jakarta.apache.org/commons/dbutils/)
  DdlUtils 1.0-RC1 | DatabaseMetaData(DDL)-XML-オブジェクトを相互変換します。 woolpack.sql.metaでもDBメタ情報を扱う簡易の部品を用意していて DdlUtils利用を検討しているのですが、DdlUtilsが多くの依存ライブラリを持つことと、とexportedな参照制約に直接アクセスできないことからまだ検討中です。 (http://db.apache.org/ddlutils/)
  dwarf 0.32 | マスタメンテナンス機能のサーブレットとクラスライブラリ。 Woolpackでもサンプルアプリケーションでjava.sql.DatabaseMetaDataを利用した 汎用CRUDウェブアプリケーションを試作しています。 (http://www.ne.jp/asahi/java/servlet/)
  Generic DAO (記事) | Javaの汎用型機構とHibernateとSpring AOPを使用してDAOパターンをテンプレート化しています。 woolpack.sqlはメソッドをひとつに限定したGeneric DAOとみなすことができます。 (http://www-06.ibm.com/jp/developerworks/java/060705/j_j-genericdao.shtml)
  Hibernate 3.2.2 | XMLにテーブルとBeanクラスの対応関係を定義します。 参照制約をアクセサでたどるように定義することができます。 特殊クエリ言語(HQL)を使用することができます。 独自のインタフェース(Session, Transaction)を使用してクライアントソースにbefore-afterパターンを定義してトランザクションを制御します。 (http://www.hibernate.org/)
  Torque 3.3 | ソースコード自動生成技術を適用しています。 検索条件を組み立てるためにビルダーパターンを使用しています(ビルダブルクエリー)。 トランザクション制御は独自のクラスを使用するかjava.sql.Connectionをメソッドで渡すことにより行います。 (http://db.apache.org/torque/ http://634.ayumu-baby.com/torque/index.html)
  Cayenne 3.0 | 設定ファイルとDAO、DTOクラスファイルをGUIを操作して生成することができます。 検索条件を組み立てるためにビルダーパターンを使用しています(ビルダブルクエリー)。 独自のインタフェース(DataContext)を使用してクライアントソースにbefore-afterパターンを定義してトランザクションを制御します。 参照制約をアクセサでたどるように定義することができます。 (http://cayenne.apache.org/)
  Spring 2.0.2 | Spring AOPによるバイトコード加工技術によるトランザクション制御機構を使用することができ、 XML定義ファイルを使用してトランザクション基点をAOPする位置を定義します。 (http://www.springframework.org/)
  LINQ | 型推論やラムダ式、Extension Methodsなどの言語機構を活用したクエリ機構です。 Woolpackでは関数型言語との類似性を検証しているので、ラムダ式を活用しているLINQ機構のメリットを検証する必要があると思います。 (http://msdn2.microsoft.com/en-us/netframework/aa904594.aspx)
  Voruta 1.0.1 | クエリーをアノテーションで定義します。 (http://voruta.sourceforge.net/)
  O/R Broker | DBカラム-Beanプロパティ対応表とSQLをXMLに記載します。 独自のクラス(Transaction)を使用してクライアントソースにbefore-afterパターンを定義してトランザクションを制御します。 (http://orbroker.sourceforge.net/)
  PriDE | 調査中 (http://pride.sourceforge.net/)
  Mr. Persister | 調査中 (http://www.jenkov.dk/mrpersister/introduction.tmpl)
  java6 | Genericsとアノテーションの組み合わせてインタフェースやアクセサにRDB情報の注釈を加えていきます。 論理的にインタフェースとデータモデルの結合が強くなっているのでこれがどのように副作用するのかまだ見えてこないです。 (http://java.sun.com/javase/6/docs/api/java/sql/package-summary.html http://www.techscore.com/tech/J2SE/JavaSE6/2.html)

  参考資料
  1. http://www.thinkit.co.jp/cert/article/0606/13/1/3.htm
  2. http://www.atmarkit.co.jp/fdb/rensai/javadb02/javadb02_3.html
  3. http://634.ayumu-baby.com/
  4. http://www.techscore.com/tech/J2SE/JavaSE6/2.html
  woolpack.sqlの特徴の詳細を以下に示します。
  1. DBメタ情報・クエリ生成・DB値バインド・DB値取得・トランザクション分離機構を Javaの汎用型でテンプレート部品化し、これらをコンポジット デザインパターンで組み立てます。
  2. クエリとバインド情報のペアをPreparedStatement情報としてまとめることにより、クエリ生成とクエリ実行の結合を疎に保ちます。
  3. 入力キーコレクションとテーブル定義メタ情報からCRUDクエリーのPreparedStatement情報を生成することができます。
  4. java.sql.DatabaseMetaData からテーブル定義メタ情報をロードすることができます。
  5. テーブル定義メタ情報からcreateクエリを生成することができます。
  6. トランザクションが管理されたDataSourceのプロキシを生成するビルダークラスを使用して、 DataSourceを使用するDBアクセスクラスはそのままで業務ロジックからトランザクション処理を分離することができます。
  7. マーク可能な文字列生成クラス(MarkableStringBuilder)を使用して、Javaプログラムでクエリを生成することができます。
  8. バインド変数コメント付きクエリからPreparedStatement情報を生成することができます。
  9. 汎用CRUDのサンプルWebアプリケーションを用意しています。DBから参照制約の情報を取得して参照先テーブルへのボタンを生成するところが特徴的です。
  履歴
  1. 20070204 新規作成。
  2. 20070212 java6を追加。4大SQLフレームワーク説明を少し追加。
  3. 20070217 助詞が変なところを修正。

トップに戻る
Copyright (C) 2006 Takahiro Nakamura. All rights reserved.