7

dozerを使用するプロジェクトを移行しようとしていますorika

ドーザーでは、次のようなものを用意するのが一般的です。

<?xml version="1.0" encoding="UTF-8"?>
<mappings xmlns="http://dozer.sourceforge.net" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://dozer.sourceforge.net
http://dozer.sourceforge.net/schema/beanmapping.xsd">
    <mapping map-id="all">
        <class-a>com.bnppa.cdj.dto.Source</class-a>
        <class-b>com.bnppa.cdj.dto.Destination</class-b>
        <field>
            <a>id</a>
            <b>id</b>
        </field>
        <field>
            <a>someField</a>
            <b>someField</b>
        </field>
    </mapping>

    <mapping map-id="small">
        <class-a>com.bnppa.cdj.dto.Source</class-a>
        <class-b>com.bnppa.cdj.dto.Destination</class-b>
        <field>
            <a>id</a>
            <b>id</b>
        </field>
    </mapping>
</mappings>

次に、オブジェクトを変換するときに mapId を使用します。

Source s = ...

List<String> mappingFiles = new ArrayList<String>();
mappingFiles.add("dozer/dozerMapping.xml");
mapper = new DozerBeanMapper(mappingFiles);

Destination d = mapper.map(mySource, Destination.class, "small");

だから私の質問は: Orika を設定してそのような mapId を設定するにはどうすればよいですか?

マッパーを定義するときにマップ ID を宣言する方法が見つかりません。

MapperFactory factory = new DefaultMapperFactory.Builder().build();

//Register a mapper
factory.registerClassMap(factory.classMap(Source.class, Destination.class)
        .field("id","id")
        .field("someField", "someField")
        .toClassMap());
4

2 に答える 2

1

Orika で複数の MapperFacade を作成し、それぞれの場合に適切な MapperFacade を使用することができます。

カスタム マッパーを使用する別の方法です。この場合、マッピング コンテキストで何かを渡し、このコンテキスト パラメータをチェックして、そのフラグに従ってカスタム マッピングでマッピングを実行できます。

于 2016-11-16T13:00:17.453 に答える