2017-01-18 2 views
1

は、次のような状況を考えてみましょう:オリカは:どのようにネストされたマッパーを使用してマッピングするために

public class A { 

    private ClassInA classInA; 

    public ClassInA getClassInA() { 
     return classInA; 
    } 

    public void setClassInA(ClassInA classInA) { 
     this.classInA = classInA; 
    } 

} 

public class B { 

    private ClassInB classInB; 

    public ClassInB getClassInB() { 
     return classInB; 
    } 

    public void setClassInB(ClassInB classInB) { 
     this.classInB = classInB; 
    } 

} 

public class ClassInA { 

    private String myString; 

    public String getMyString() { 
     return myString; 
    } 

    public void setMyString(String myString) { 
     this.myString = myString; 
    } 

} 

public class ClassInB { 

    private String myString; 

    public String getMyString() { 
     return myString; 
    } 

    public void setMyString(String myString) { 
     this.myString = myString; 
    } 

} 

今、私はオリカ使用BAをマップします。私はそうするためにコンバータが必要です。同様:

public class MyMapper { 

    @Override 
    protected void configure(MapperFactory factory) { 
     ConverterFactory converterFactory = factory.getConverterFactory(); 
     converterFactory.registerConverter(new MyConverter()); 

     factory.classMap(A.class, B.class) // 
       .field("classInA", "classInB") // 
       .register(); 
    } 
} 

public class MyConverter extends CustomConverter<ClassInA, ClassInB> { 

    @Override 
    public ClassInB convert(ClassInA source, Type<? extends ClassInB> destinationType) { 
     ClassInB classInB = new ClassInB(); 
     classInB.setMyString(source.getMyString()); 
     return classInB; 
    } 

} 

ClassInA​​のためのマッパーが良いだろうが。同様:

public class MyMapper extends ConfigurableMapper { 

    @Override 
    protected void configure(MapperFactory factory) { 
     factory.classMap(ClassInA.class, ClassInB.class) // 
       .byDefault 
       .register(); 
    } 
} 

悲しいことに、私はどのようにMyMapperでマッパーを登録する見当もつかない。 converterFactory.registerMapper(new MyMapper());のようなものはありません。私がこれを行うことができる唯一の方法はvia

.customize(
    return new CustomMapper<LoanContractRequestValue, LoanContrReqERPCrteReqLoanContr>() { 
     @Override 
     public void mapAtoB(A source, B destination, MappingContext context) { 
      destination.setMyString(source.getMyString()); 
     } 
    }; 
) 

ですが、これは実際に行く方法ですか?

答えて

1

同じmapperFactoryに複数のclassMapsを登録することができます。Orikaは、クラス/タイプに基づいてどちらを使用するかを知ります。

public class MyMapper extends ConfigurableMapper { 
    @Override 
    protected void configure(MapperFactory factory) { 
     factory.classMap(A.class, B.class) 
       .field("classInA", "classInB") 
       .register(); 

     factory.classMap(ClassInA.class, ClassInB.class) 
       .byDefault 
       .register(); 
    } 
} 
関連する問題