241

Javaを使用してDOをDTOに変換しようとしており、独自の作成を開始する前に自動化されたツールを探しています。同じことができる無料のツールがあるかどうか知りたかっただけです。

4

9 に答える 9

405

そこにはいくつかのライブラリがあります:

  • Commons-BeanUtils : ConvertUtils -> 文字列スカラー値を指定されたクラスのオブジェクトに、文字列配列を指定されたクラスの配列に変換するためのユーティリティ メソッド。

  • Commons-Lang : ArrayUtils -> 配列、プリミティブ配列 (int[] など) およびプリミティブ ラッパー配列 (Integer[] など) に対する操作。

  • Spring フレームワーク: Spring は PropertyEditor の優れたサポートを備えており、オブジェクトを文字列に変換するためにも使用できます。

  • Dozer : Dozer は、あるオブジェクトから別のオブジェクトにデータを再帰的にコピーする、強力でシンプルな Java Bean から Java Bean へのマッパーです。通常、これらの Java Bean は異なる複合型になります。

  • ModelMapper : ModelMapper は、オブジェクトを相互に自動的にマップするインテリジェントなオブジェクト マッピング フレームワークです。特定のユースケースを処理するためのシンプルなリファクタリング安全な API を提供しながら、オブジェクトをマップするための規則ベースのアプローチを使用します。

  • MapStruct : MapStruct は、Bean マッピング用のコンパイル時コード ジェネレーターであり、実行時に高速 (リフレクションなどを使用しない)、依存関係のないタイプ セーフなマッピング コードを生成します。

  • Orika : Orika はバイト コード生成を使用して、最小限のオーバーヘッドで高速なマッパーを作成します。

  • Selma : マッピング用のコンパイル時コード ジェネレーター

  • JMapper : Annotation、XML、または API を使用した Bean マッパーの生成(2 年前に最終更新されたようで、死んでいるようです)

  • Smooks : Smooks JavaBean Cartridge を使用すると、メッセージ データから Java オブジェクトを作成してデータを取り込む (つまり、データをバインドする) ことができます (コメントのスーパーフィリンによって提案されています)。(もはや積極的な開発は行われていません)

  • Commons-Convert : Commons-Convert は、あるタイプのオブジェクトを別のタイプに変換するタスク専用の単一のライブラリを提供することを目的としています。最初の段階では、オブジェクトから文字列へ、および文字列からオブジェクトへの変換に焦点を当てます。(死んでいるようです、最終更新は2010年です)

  • Transmorph : Transmorph は、あるタイプの Java オブジェクトを別のタイプのオブジェクトに変換するために使用される無料の Java ライブラリです (別のシグネチャを使用し、パラメータ化されている可能性があります)。(死んでいるようです、最終更新は2013年です)

  • EZMorph : EZMorph は、オブジェクトを別のオブジェクトに変換するための単純な Java ライブラリです。プリミティブとオブジェクトの変換、多次元配列の変換、および DynaBeans を使用した変換をサポートしています(2008 年に最終更新されたようですが、死んでいるようです)。

  • Morph : Morph は、アプリケーションの内部相互運用性を容易にする Java フレームワークです。情報がアプリケーションを通過する際、複数の変換が行われます。Morph は、こ​​れらの変換を実装する標準的な方法を提供します。(死んでいるようです、最終更新は2008年です)

  • Lorentz : Lorentz は、一般的なオブジェクトからオブジェクトへの変換フレームワークです。あるタイプの Java オブジェクトを別のタイプのオブジェクトに変換するための単純な API を提供します。(死んでいるようです)

  • OTOM : OTOM を使用すると、任意のオブジェクトから任意のデータを他のオブジェクトにコピーできます。可能性は無限大。「秋」へようこそ。(死んでいるようです)

于 2009-09-16T13:27:46.790 に答える
107

ドーザーを試すことができます。

Dozer は、あるオブジェクトから別のオブジェクトにデータを再帰的にコピーする Java Bean から Java Bean へのマッパーです。通常、これらの Java Bean は異なる複合型になります。

Dozer は、単純なプロパティ マッピング、複雑な型マッピング、双方向マッピング、暗黙的明示的マッピング、および再帰的マッピングをサポートしています。これには、要素レベルでのマッピングも必要なコレクション属性のマッピングが含まれます。

于 2009-09-16T12:52:20.317 に答える
32

もう1つはオリカです - https://github.com/orika-mapper/orika

Orika は、あるオブジェクトから別のオブジェクトにデータを再帰的にコピーする Java Bean マッピング フレームワークです。これは、多層アプリケーションを開発するときに非常に役立ちます。

Orika は、必要に応じて構成と拡張によるカスタマイズを提供しながら、可能な限り自動化することに重点を置いています。

Orika は開発者に次のことを可能にします。

  • 複雑で深く構造化されたオブジェクトのマッピング
  • ネストされたプロパティを最上位のプロパティに、またはその逆にマッピングすることにより、オブジェクトを「フラット化」または「拡張」します
  • オンザフライでマッパーを作成し、カスタマイズを適用してマッピングの一部またはすべてを制御します
  • オブジェクト グラフ内の任意の場所にある特定のオブジェクト セットのマッピングを完全に制御するためのコンバーターを作成します (タイプ別、または特定のプロパティ名別)。
  • プロキシまたは拡張オブジェクト (Hibernate のオブジェクトやさまざまなモック フレームワークなど) を処理する
  • 1 つの構成で双方向マッピングを適用する
  • ターゲットの抽象クラスまたはインターフェースの適切な具象クラスのインスタンスにマップする
  • 逆マッピングを処理する
  • JavaBean 仕様を超える複雑な規則を処理します。

Orika はバイト コード生成を使用して、最小限のオーバーヘッドで高速なマッパーを作成します。

于 2011-06-15T10:50:27.117 に答える
22

ModelMapperもチェックする価値のあるライブラリです。ModelMapper の設計は、次の点で他のライブラリとは異なります。

  • 送信元と送信先のプロパティをインテリジェントに一致させることにより、オブジェクト モデルを自動的にマップします
  • 文字列を使用するのではなく、実際のコードを使用してフィールドとメソッドをマップするリファクタリング用の安全なマッピング API を提供します
  • カスタム シナリオを簡単に処理するために、規則ベースの構成を利用します。

詳細については、ModelMapper サイトをご覧ください。

http://modelmapper.org

于 2011-06-22T19:25:50.910 に答える
14

Apache コモンズ beanutils を使用します。

static void copyProperties(Object dest, Object orig) -プロパティ名が同じであるすべてのケースで、元の Bean から宛先 Bean にプロパティ値をコピーします。

http://commons.apache.org/proper/commons-beanutils/

于 2009-09-16T13:05:17.897 に答える
6

もう 1 つの Java マッピング エンジン/フレームワーク Nomin があります: http://nomin.sourceforge.net

于 2010-12-09T22:34:23.783 に答える
3

JMapper Frameworkを試すことをお勧めします。

これは、Java Bean から Java Bean へのマッパーであり、注釈や XML を使用して動的にデータの受け渡しを実行できます。

JMapper を使用すると、次のことができます。

  • ターゲット オブジェクトの作成と強化
  • 特定のロジックをマッピングに適用する
  • XML ファイルを自動的に管理する
  • 1 対 N および N 対 1 の関係を実装する
  • 明示的な変換を実装する
  • 継承された構成を適用する
于 2012-09-04T16:13:22.900 に答える
2

Dozer に基づくマッピング フレームワークを試すこともできますが、Excel マッピング宣言を使用します。彼らはいくつかのツールと追加のクールな機能を持っています. http://openl-tablets.sf.net/mapperで確認してください

于 2011-06-20T10:42:06.733 に答える
2

オプションとして Moo を追加できることをうれしく思いますが、明らかに私はそれに偏っています: http://geoffreywiseman.github.com/Moo/

単純なケースでは非常に使いやすく、より複雑なケースでも妥当な能力を発揮しますが、さらに複雑にするために拡張することを想像できる領域がまだいくつかあります。

于 2011-04-21T15:36:17.330 に答える