mapstruct进阶用法《二》

1.前面mapstruct基于接口上的注解被注解处理器实现,我们可以有一个猜想,还有什么可以被继承或者实现
abstract ?对了,抽象类

 

/**
 * 映射器也可以定义为抽象类的形式而不是接口,
 * 并直接在此映射器类中实现自定义方法。
 * 在这种情况下,MapStruct将生成抽象类的扩展,并实现所有抽象方法。
 * 这种方法优于声明默认方法的优点是可以在映射器类中声明附加字段
 */
@Mapper
public abstract class PersonMapStruct {

  public static   PersonMapStruct INSTANCE = Mappers.getMapper(PersonMapStruct.class);
    @Mappings({
            @Mapping(target = "age" ,expression = "java(versionConvert(demo.getAge()))"),
            @Mapping(target = "hobby" , source ="love")

    })
    public abstract   Demo0 domain2dto(Demo demo);

    public abstract List<Demo0> domain2dt(List<Demo> demo);

    //转换versionTitle
     Long versionConvert(Integer age){
        return Long.valueOf(age);
    }

    public Demo0 getDemo(){
         Demo0 demo0=new Demo0();
         demo0.setHobby("计算器");
         demo0.setName("无名");
         return demo0;
    }
}

 

@Generated(
    value = "org.mapstruct.ap.MappingProcessor",
    date = "2022-01-25T21:48:06+0800",
    comments = "version: 1.2.0.Final, compiler: javac, environment: Java 1.8.0_181 (Oracle Corporation)"
)
public class PersonMapStructImpl extends PersonMapStruct {

    @Override
    public Demo0 domain2dto(Demo demo) {
        if ( demo == null ) {
            return null;
        }
         //利用上面的构造生成,也可以有别的参数在此使用
        Demo0 demo0 = getDemo();

        demo0.setHobby( demo.getLove() );
        demo0.setName( demo.getName() );

        demo0.setAge( versionConvert(demo.getAge()) );

        return demo0;
    }

    @Override
    public List<Demo0> domain2dt(List<Demo> demo) {
        if ( demo == null ) {
            return null;
        }

        List<Demo0> list = new ArrayList<Demo0>( demo.size() );
        for ( Demo demo1 : demo ) {
            list.add( domain2dto( demo1 ) );
        }

        return list;
    }
}

 

posted @ 2022-01-25 17:29  余生请多指教ANT  阅读(75)  评论(0编辑  收藏  举报