トップ OSS紹介 MapStruct

MapStruct

NRIのOpenStandiaが提供するMapStruct最新情報

MapStruct情報

MapStructとは

MapStructは、JavaBean間のマッピング実装を簡素化するコードジェネレータです。アノテーションにより自動生成されるマッピングコードはプレーンなメソッド呼び出しを利用するため、リフレクションなどにくらべて高速でタイプセーフに動作し、動作も理解しやすいです。

ほとんどの多層アプリケーションでは、異なるオブジェクトモデル(EntityやDtoなど)間でマッピングを行う必要があります。このようなマッピングコードの作成は退屈な上に、エラーが発生しやすい作業です。MapStructでは、このようなマッピング作業を可能な限り自動化することを目的としています。他のマッピングフレームワークとは異なり、コンパイル時にBeanマッピングクラスを生成されるため、高いパフォーマンスが保証され、開発者による迅速なフィードバックと、エラーチェックが可能となっています。

MapStructは、Javaコンパイラにプラグインされるアノテーションプロセッサであり、コマンドラインビルド(Maven、Gradle、Antなど)や好みのIDE(Eclipse、IntelliJ IDEA、NetBeansなど)から利用可能です。

主な特徴

マッパー定義

マッパーを作成するにはアノテーションを付与するだけです。異なるプロパティへのマッピング、複数ソースからのマッピング、ネストされたBeanのマッピング、既存のインスタンスへのマッピングなども可能です。

マッパー参照

DI Frameworkを使用していない場合は、org.mapstruct.factory.Mappersクラス経由で Mapper インスタンスを取得可能です。CDIやSpring Frameworkを使用している場合は、適切コンポーネントモデルを指定したアノテーションを付与することで、マッパーをインジェクション可能です。

データ型変換

マッピングでは属性の型が異なるケースがあります。MapStructでは、多くの場合、型変換を自動的に処理します。マッピングが単純ではない場合は、カスタムマッピングの追加や手動実装したマッパーを利用することが可能です。

コレクションのマッピング

コレクションのマッピングはソースコレクションを反復処理して各要素をターゲットコレクションにマッピングします。型が異なる場合、変換のフォーマットを指定することもできます。また、コレクションのマッピング戦略を4つのタイプから指定することが可能です。

Streamのマッピング

Streamのマッピングでは、ソース型とターゲット型に応じて、Iterable インタフェースか配列に暗黙的に変換可能です。

列挙型のマッピング

列挙型同士、列挙型からString、Stringから列挙型といったマッピングが可能です。名前変換のルール(サフィックス、プレフィックス、大文字小文字変換など)を指定したカスタムマッピングも可能です。

オブジェクトファクトリ

デフォルトでは、ターゲットのインスタンスの生成はコンストラクターが利用されます。マッパーアノテーションのusesを利用することで、ターゲットとしてファクトリメソッドで生成したインスタンスを利用することが可能です。

高度なマッピングオプション

高度なマッピング機能では、

  • デフォルト値や定数
  • 式(現状は、Javaのみ)
  • デフォルト式(nullの場合のみ動作。Javaのみ)
  • サブクラスマッピング
  • null値マッピング戦略
  • nullコレクションマッピング戦略
  • 条件付きマッピング
  • 例外ハンドリング

などが利用可能です。

マッピング再利用

既に定義されているマッピングを利用して、

  • マッピングの継承
  • 逆マッピング
  • マッピングの共有

が利用可能です。

マッピングカスタマイズ

  • マッピングカスタマイズ方法として、
  • 自動出力されたメソッドに対してカスタマイズ処理を追加するデコレータ
  • マッピングの前後で呼び出されるコールバックメソッド

などが利用可能です。

MapStruct SPI

MapStruct SPIを実装することで、

  • アクセサが通常とは異なる命名のクラスであっても、マッピングが可能
  • 特定のクラスだけマッピングを除外
  • カスタム列挙型の命名/変換戦略

などが利用可能です。

サードパーティAPI統合

MapStruct は、サードパーティのライブラリから既に定義されているアノテーションを操作できる柔軟性を備えています。しかし、類似機能を持っているlombokと連携する場合は、バージョンの制約、アノテーションプロセッサの調整が必要なので注意が必要です。

参考: https://mapstruct.org/documentation/stable/reference/html/

類似プロダクト

類似の機能をもつOSSとしては、

  • Commons BeanUtils
  • Dozer
  • JMapper
  • Lombok
  • ModelMapper
  • Orika

などがあります。

動作環境

MapStructはJSR269に基づいたJavaアノテーションプロセッサなので、以下のようなコマンドラインビルドやIDEなどから利用可能です。

コマンドラインビルド:

  • javac
  • Maven
  • Gradle
  • ant

IDE プラグインによる補完サポート:

MapStructのライセンス

MapStructは、「Apacheライセンスバージョン2」(Apache License version2)というライセンスに基づいて公開され、営利、非営利を問わず、誰でも自由かつ無償で利用・改変・再配布できるようになっています。

製品ダウンロード

オープンソース年間サポートサービス

OpenStandiaではOSSを安心してご利用いただけるように、オープンソース年間サポートサービスをご提供しております。
サポートしているOSSは下記ページをご参照ください。

お気軽にお問い合わせください

関連OSS

  • Lombok

    Lombok

    ロンボック。JavaのDTO(Data Transfer Object)のような単調な処理が連続するコードを簡潔に記述するためのJavaライブラリです。

  • Java

    Java

    ジャバ。サンマイクロシステムズ社(2010年にオラクル社に吸収合併)により開発されたプログラミング言語、及びその動作環境である Java VM(ジャバ仮想マシン) です。

オープンソースに関する様々な課題、OpenStandiaがまるごと解決します。
下記コンテンツも
あわせてご確認ください。