類似RDB/SQL系技術との対応関係。
類似RDB/SQL系技術との対応関係を以下に示します(順不同です)。
プロダクト トランザクション制御 属性マッピング クエリ操作 筆者視点の特徴
woolpack.sql 0.08 委譲とプロキシ 数種類のパターンを試行 or SQL埋め込み or ハンドラ自作 自動生成 or StringBuilder拡張クラスで自作 DBメタ情報の管理・クエリ生成・DB値バインド・DB値取得・トランザクション分離機構をテンプレート化しており、 これらをコンポジットとして組み立てます。
S2DAO 1.0.40 バイトコードAOP(XML) アノテーション or SQL埋め込み 自動生成 or SQLコメントによる動的SQL (http://s2dao.seasar.org/ja/index.html)
iBatis 2.2.0 before after XML(GUIで編集) XMLによる動的SQL 業務クラスからは文字列キーでDBアクセス用オブジェクトを取得します。 (http://ibatis.apache.org/)
Object Relational Bridge (OJB) 1.0.4 before after アノテーション コンポジットで検索条件を生成 (http://db.apache.org/ojb/)
Commons DBUtils 1.1 connection ハンドラで自作 - 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 before after XML 独自言語(HQL) 参照制約をアクセサでたどるように定義することができます。 (http://www.hibernate.org/)
Torque 3.3 before after XML or メタデータ コンポジットで検索条件を生成 ソースコード自動生成技術を適用しています。 (http://db.apache.org/torque/ http://634.ayumu-baby.com/torque/index.html)
Cayenne 3.0 before after XML(GUIで編集) コンポジットで検索条件を生成 参照制約をアクセサでたどるように定義することができます。 (http://cayenne.apache.org/)
Spring 2.0.2 バイトコードAOP SQL埋め込み or ハンドラで自作 - (http://www.springframework.org/)
LINQ - 言語の射影(Projection)機構を使用する 言語のラムダ式で検索条件(選択(select))を定義 型推論やラムダ式、Extension Methodsなどの言語機構を活用したクエリ機構です。 Woolpackでは関数型言語との類似性を検証しているので、ラムダ式を活用しているLINQ機構のメリットを検証する必要があると思います。 (http://msdn2.microsoft.com/en-us/netframework/aa904594.aspx)
Voruta 1.0.1 before after アノテーション アノテーション (http://voruta.sourceforge.net/)
O/R Broker 2.0.3 before after SQL埋め込み or XML XMLによる動的SQL (http://orbroker.sourceforge.net/)
PriDE 2.3.1 before after 基本クラス and 連想配列 - 単一テーブルの単一レコードに対応するBeanクラスを継承によって定義します。 (http://pride.sourceforge.net/)
Mr. Persister 3.8.0 before after 数種類のパターンを試行 - (http://www.jenkov.dk/mrpersister/introduction.tmpl)
java6 不明 アノテーション アノテーションによる自動生成 Genericsとアノテーションの組み合わせてインタフェースやアクセサにRDB情報の注釈を加えていきます。 http://www.techscore.com/tech/J2SE/JavaSE6/2.htmlの 「Ease of Development」の箇所はjava6からは除外されているようです。 (http://forums.java.net/jive/thread.jspa?messageID=196875 http://java.sun.com/javase/6/docs/api/java/sql/package-summary.htmlより)
Kuina-Dao 1.0.0-rc1 バイトコードAOP 命名規則 命名規則を元にして生成 Daoインタフェースのメソッド名を命名規則としてバイトコード加工技術で実装を注入します。 (http://kuina.seasar.org/ja/index.html)
DBUnit 2.2 before after と template method (JUnit) - コマンドとして隠蔽 (http://dbunit.sourceforge.net/ http://blog.goo.ne.jp/ikkoan/e/ad334bb19bc38d63c94325b3123800b3)
参考資料
  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/


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 助詞が変なところを修正。
  4. 20070303 Kuina-Dao と DBUnitを追加。表を整理。
トップに戻る
Copyright (C) 2006 Takahiro Nakamura. All rights reserved.