This is a cache of http://dbflute.seasar.org/ja/manual/function/genbafit/projectfit/simpledto/index.html. It is a snapshot of the page at 2024-11-13T00:19:42.123+0000.
(転送用の)シンプルなDTO | DBFlute

(転送用の)シンプルなDTO

概要

例えば、Flex や JsON などのデータ転送の仕組みと連携する際、DBFluteの Entity クラスでは相性的な不都合があるかもしれません。 そこで、DBFluteランタイムやその他クラスに依存せず、データ転送ライブラリの仕様次第で微調整ができる "シンプルなDTO" (simpleDto) をDBFluteで自動生成できます。

さらに、DB側とやりとりするために、 "DBFlute の Entity" と simpleDto を連携させる "DTOのマッパー" (DtoMapper) も自動生成できます。

他のフレームワークとのアダプタ的な役割を担う性質上、つどつど進化させていく必要のある機能であるため、 固定的なドキュメントを作成していません。また、EntityやConditionBeanなどと比べて、細かい仕様面で制限がある可能性もあります。 利用する際は simpleDto を 使った Example を参考にすると良いでしょう。

simpleDtoの概念図

図 : simpleDtoの概念図 SimpleDtoの概念図

自動生成の設定

DBFluteプロパティの simpleDtoDefinitionMap.dfprop にて設定することで自動生成されます。

この dfprop ファイルは、セットアップデフォルトして用意されていませんので、ファイル自体を手動で作成する必要があります。 simpleDto を使った Example からコピーして土台にすると良いでしょう。dbflute-flexserver-example にて simpleDto が利用されています。

simpleDto は、baseDtoPackage と extendedDtoPackage を定義することで自動生成されるようになります。DtoMapper は、extendedMapperPackage @since 0.9.9.1B もしくは dtoMapperPackage @until 0.9.9.1A を定義することで自動生成されます。

区分値メソッドを生成する

simple が特徴なのでデフォルトでは区分値メソッドは生成されませんが、 (連携する仕組みとの相性的に問題ないのであれば)区分値メソッドを関連付けすることができます。その際、DBFlute側の CDef を直接参照せず、同じく simple な専用の CDef (simpleCDef) を生成して参照します。@since 0.9.8.8

simpleCDef は、simpleDtoDefinitionMap.dfprop の simpleCDefClasssimpleCDefPackage を定義することで自動生成されます。さらに、isClassificationDeployment を true に設定すると区分値が simpleDto に関連付けられます。

転送側の仕組みに適応させる

JsONICに適応させる

例えば日付型のデータ、JsONIC で JsON に変換するとデフォルトでは JsON 上ではミリ秒で管理されますが、yyyy-MM-dd HH:mm:ss の形式で変換したいというような場合に、simpleDto に JsONIC の JsONHint アノテーションを指定して任意のフォーマットで変換することができます。@since 0.9.8.8

simpleDtoDefinitionMap.dfprop の jsonicDecorationMap の datePattern, timestampPattern, timePattern プロパティにて、JsONHint アノテーションの format 属性に設定したい値を指定します。

詳しくは、dbflute-guice-example にて。

GWTに適応させる

GWT では、simpleDateFormat など幾つかの利用できない JavaAPI が存在します。それらを抑制し調整して GWT で利用できる形式の DTO にすることができます。@since 0.9.9.1A

simpleDtoDefinitionMap.dfprop の gwtDecorationMap の issuppressJavaDependency プロパティを true にすることで実現できます。GWT のExampleではありませんが、JsON とのExampleの simpleDtoDefinitionMap.dfprop にて、このプロパティの(コメントアウト)テンプレートがあります。

主な細かい仕様

主な細かい仕様を列挙します。

DTO上の無効な区分値は null に
DtoMapper で Entity に値を設定する際、DTO上の区分値が存在しない場合、 Entity には null で登録されます。(CDef の codeOf() を利用されるため、そのような挙動となります)
ApplicationOutsidesql のマッパーはアプリ側に
ApplicationOutsidesql の外だしsQLに対応する simpleDto と DtoMapper は、そのアプリ側のディレクトリに自動生成されます。 simpleDto や DtoMapper の outputDirectory の設定は無視されます。
ネイティブ型のsetterは削除されない
区分値に関連付いているカラムの場合で、(EntityやConditionBeanに対する)ネイティブ型のsetterを削除するオプションが設定されている場合でも、 simpleDto の方の setter は削除されません。simple で他のフレームワークと連携させるというコンセプトからそのようにしています。
古いテーブルのDTOの自動削除はされない @until 0.9.9.0D
EntityやConditionBeanなどは古いテーブルに対応するクラスが自動削除されますが、simpleDto に関してはその機能はありません。

simpleDto の Example

それぞれパターンごとの Example があります。

JsON とのExample

dbflute-guice-example にて、JsON との連携を想定した Example があります。 単体テストで JsON との変換を行っています。 simpleDto, DtoMapper, simpleCDef を自動生成し、区分値も関連付けています。

Flex とのExample

dbflute-flexserver-example にて、Flex との連携を想定した simpleDto を自動生成しています。DtoMapper も同時に自動生成していますが、simpleCDef は自動生成していません。パターンを網羅するためだけにそうしているだけで、区分値を利用しない理由は特にFlexとは関係ありません。

DBFlute Example - 他のフレームワークとの組み合わせ

simpleCDef のみのExample

dbflute-sqlite-example にて、simpleCDef のみを利用しています。 simpleDto は不要だが、区分値だけはDBFlute依存しない領域で利用したいという場合に有効です。 うまく使えば単なる ENUM 自動生成と言えます。