プロダクト |
トランザクション制御 |
属性マッピング |
クエリ操作 |
筆者視点の特徴 |
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) |
参考資料