S2Daoのスタイル(DAOパターンや2 Way SQL)を踏襲したJava6(JDBC4.0)対応のO/Rマッパーです。 主な特長は2つあります。
Domain Oriented MApping Framework の略です。
値のとり得る範囲(定義域)のことです。 Domaでは、テーブルのカラムの値を、ドメインと呼ばれるJavaオブジェクトで扱えます。
たとえば、一般的なO/Rマッパーでは、データベースのVARCHAR型をJavaのStringにマッピングしますが、 Domaでは、アプリケーション固有の型にマッピングすることを推奨しています。 なぜならば、データベース上では同じVARHCAR型でも、従業員名を表すVARCHAR型と電話番号を表すVARCHAR型は、 異なるJavaの型で扱うべきと考えるからです。 このアプリケーション固有の型をドメインと呼びます。
主要な利点は次のものです。
Annotation Processing Toolの略です。 狭義では、Java 5 で導入された Mirror API を指しますが、広義では、Java 6 で導入された Pluggable Annotation Processing API (JSR 269) を含みます。
aptを利用すると、コンパイル時のソースコード検証や、ソースコード生成が可能です。
Domaでは、Pluggable Annotation Processing APIを使用して、 Daoのインタフェースから実装クラスを生成しています。 また、SQLファイルの存在チェックや、メソッド定義が規約に合致しているかどうかの検証も行っています。
JRE 6 以上をサポートしています。JRE 5 以前はサポートしていません。
いいえ、必須ではありません。
Domaはどのライブラリにも依存していません。単独で動作します。
JDK 6 以上をサポートしています。JDK 5 以前はサポートしていません。
Eclipseをお奨めします。Eclipseのバージョンは 3.5 以上でなければいけません。
Eclipse 3.5 は JDK 6 で動作させる必要があります。 また、プロジェクトでも JDK 6 を使用する必要があります。
詳しくはセットアップを参照してください。
実績は聞きませんが、IntelliJ IDEAでも動作します。 DomaをIntelliJ IDEAで動かすを参照ください。
はい。Eclipseプラグインとコード生成ツールを用意しています。
詳しくは開発支援ツールを参照してください。
Factory PathにもDomaのjarファイルを登録してください。
Factory Pathの設定画面は、プロジェクトのプロパティ設定画面から、 Java - Compiler - Annotation Processing - Factory Path と辿れます。 Annotation ProcessingとFactory Pathの画面では、 「Enable project specific settings」のチェックボックスをチェックしてください。
詳しくはセットアップを参照してください。
SQLファイルは、aptにより生成されるクラスの出力ディレクトリから検索されます。 SQLファイルの出力ディレクトリとaptにより生成されるクラスの出力ディレクトリが同じであることを確認してください。
Eclipseの場合、プロジェクトのプロパティの「Java Build Path」の設定画面で、 ソースフォルダごとに出力先ディレクトリを変更可能になっています。 この設定を無効にするか、SQLファイルの出力ディレクトリとaptにより生成されるクラスの出力ディレクトリを合わせてください。
Eclipseのプラグインm2e(m2eclipse)を使用する場合、出力先ディレクトリの変更が必要な場合があります。 設定方法はm2eでDomaを使う場合に気をつけることを参照してください。
Eclipseを利用している場合、デフォルトではプロジェクト直下の「.apt_generated」ディレクトリに出力されます。
出力先を変更したい場合は、注釈処理の設定を参考にしてください。
aptの設定が正しく行われていない可能性があります。 セットアップを見直してください。
もしくは、単にPackage Explorerビュー上に「.apt_generated」ディレクトリが表示されていないだけかもしれません。 「.apt_generated」は、名称が「.」で始まっているために、Package Explorerビューで表示対象外になります。 対応方法としては以下のいずれかを選択してください。
出力先を変更したい場合は、注釈処理の設定を参考にしてください。
いいえ、できません。 また、Doltengへの対応は現在のところ予定されていません。
Seasar2とDomaを組み合わせたプロジェクトの雛形には、Doma JPetStoreをお使いください。
Windows版のEclipse3.5上のAntには、日本語をコンソールに出力できないという問題があります。 日本語を出力するタスクを実行すると処理が途中で止まってしまいます。
Antはコマンドラインから実行するか、もしくはEclipse3.6以上をお使いください。
アプリケーションのビルド方法や注釈処理を参照してください。
アプリケーションのビルド方法や注釈処理を参照してください。
アプリケーションのビルド方法や注釈処理を参照してください。
javacには、aptに関するバグがあります。 コンパイルが成功しているにもかかわらず、誤ったエラーメッセージが出力されている可能性があります。
詳しくはアプリケーションのビルド方法を参照してください。
次のRDBMSに対応しています。
要望があれば他のRDBMSへの対応も検討します。 また、利用者が独自に対応モジュール(org.seasar.doma.jdbc.dialect.Dialectの実装クラス)を作成することも可能です。
はい。更新系SQL、ストアドプロシージャー/ファンクション呼び出しについてはSQLを自動で生成できます。 検索系のSQLについては、自動生成機能はありませんが、ファイルに外部化したSQLを実行し、その結果をJavaのオブジェクトにマッピングする機能があります。 更新系のSQLについても、必要であれば、ファイルに外部化したSQLを利用できます。
詳しくはクエリ定義を参照してください。
SQLファイルに、SQLコメントを使って条件を指定できます。 SQLコメントは実行時に解析され、条件によって異なるSQLが生成されます。
SQLコメントについてはSQLファイルを参照してください。
SQLコメントの機能だけで条件を指定することが困難な場合には、SQLビルダを利用してプログラム上でSQLを組み立てられます。
SQLビルダについてはビルダを利用したSQLの組み立てを参照してください。
いいえ、ありません。 しかし、動的なSQLは、SQLコメントを使って条件指定できます。 また、外部化されたオリジナルのSQLをページング用のSQLや悲観的ロック用のSQLに変換する機能があります。
はい、サポートしています。
はい、バージョン番号による楽観的排他制御をサポートしています。
はい、ファイルに外部化したオリジナルのSQLを悲観的排他制御用SQLに変換できます。 ただし、RDBMSが悲観的排他制御に対応している必要があります。
詳しくは悲観的排他制御を参照してください。
はい、ファイルに外部化したオリジナルのSQLをページング用SQLに変換できます。
詳しくはページングを参照してください。
はい。データベースのIDENTITY、シーケンス、テーブルを利用した自動生成がサポートされています。
詳しくはフィールド定義を参照してください。
はい、サポートしています。
詳しくはフィールド定義を参照してください。
いいえ、できません。 Domaでは、SQLの結果セット1行をそのまま1つのエンティティのインスタンスにマッピングします。 このほうがシンプルでわかりやすいと考えているためです。
いいえ、サポートしていません。 遅延ローディングによりSQLの発行のタイミングが予測しづらくなり、トラブルの元になりやすいと考えているためです。
はい、サポートしています。
詳しくはストアドプロシージャーおよびストアドファンクションを参照してください。
いいえ、ありません。 キャッシュはDomaが位置づけられるデータアクセス層よりも上位の層で行ったほうがわかりやすいと考えているからです。
いいえ、Domaでは提供していません。 コネクションプーリング機能をもつアプリケーションサーバー、フレームワーク、ライブラリ等と組み合わせて使用してください。
はい、ローカルトランザクションをサポートしています。
詳しくはトランザクションを参照してください。
いいえ、使用できません。 ジェネリックDAOを使用するとコード量は減りますが、コードの見通しがかえって低下すると考えているため使用できないようにしています。 (ジェネリックDAOについてはDAOを繰り返すな!を参照ください。)
たとえば、ジェネリックDAOでは、特定のエンティティをパラメータとしてメソッドを呼び出している箇所を探すのが容易ではありません。 ジェネリックDAOでなければメソッドのシグネチャが固定であるためIDEのCall Hierarchy機能を使って簡単に特定可能ですが、 ジェネリックDAOの場合、メソッドのパラメータの型がジェネリクス型であるためにCall Hierarchy機能を使っても呼び出し元を絞り込めません。
可能ですが、推奨しません。 同じような設定を重複して用意しなければならず、仕様が似ているようで異なるため混乱の元になります。
Domaと他のデータアクセスのライブラリを組み合わせるのであれば、JDBCを薄くラップしたライブラリをお奨めします。 たとえば、次のものが挙げられます。
これらのライブラリは、プログラム上で動的にSQLを組み立て実行したい場合に使用するといいでしょう。 その場合、SQLの組み立てと実行はデリゲート定義で指定したデリゲート先で行うことを推奨します。
単にSQLをプログラムで組み立てることが目的であれば、Domaが提供するSQLビルダを利用できます。 SQLビルダについてはビルダを利用したSQLの組み立てを参照してください。
JDBCドライバの設定を参照してください。