web-dev-qa-db-ja.com

Javaオブジェクトからオブジェクトへのマッピングのためのツールはありますか?

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

216
ravinikam

Dozer を試すことができます。

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

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

104
skaffman

周辺にはいくつかのライブラリがあります。

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

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

  • Spring framework :SpringはPropertyEditorsに対する優れたサポートを備えており、オブジェクトを文字列に変換したり、文字列から変換したりするためにも使用できます。

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

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

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

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

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

  • JMapper :注釈、XML、またはAPIを使用したBeanマッパーの生成

  • Smooks :Smooks JavaBeanカートリッジを使用すると、メッセージデータからJavaオブジェクトを作成してデータを入力できます(つまり、データをバインドします)(コメント内で superfilin で推奨) )。 (もはや活発な開発中ではありません)

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

  • Transmorph :Transmorphは、1つのタイプのJavaオブジェクトを別のタイプのオブジェクトに変換するために使用される無料のJavaライブラリです(別の署名、場合によってはパラメーター化されます) 。 (死んだようです、最終更新2013)

  • EZMorph :EZMorphは、オブジェクトを別のオブジェクトに変換するためのシンプルなJavaライブラリです。プリミティブおよびオブジェクトの変換、多次元配列およびDynaBeansによる変換をサポートします (死んだようだ、最終更新2008)

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

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

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

371
Pascal Thivent

もう1つはOrika- https://github.com/orika-mapper/orika

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

Orikaは、可能な限り自動化に焦点を当て、必要に応じて構成と拡張を通じてカスタマイズを提供します。

Orikaにより、開発者は次のことができます。

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

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

30
Tomas

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

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

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

http://modelmapper.org

21
Jonathan

Apache commons beanutilsを使用します。

static void copyProperties(Object dest, Object orig)-プロパティ名が同じであるすべての場合に、プロパティ値をオリジンBeanからデスティネーションBeanにコピーします。

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

13
Pablojim

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

6
Dmitry

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

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

JMapperでできること:

  • ターゲットオブジェクトを作成して強化する
  • 特定のロジックをマッピングに適用する
  • XMLファイルを自動的に管理する
  • 1対NおよびN対1の関係を実装する
  • 明示的な変換を実装する
  • 継承された構成を適用する
3
Alessandro

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

単純な場合には非常に使いやすく、より複雑な場合には妥当な機能を備えていますが、さらに複雑さを増すためにそれを拡張することを想像できる領域がまだいくつかあります。

2

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

2
Ivan