mapstruct 再也不用set不同的属性而劳累了

public enum Enums {
    ADS
}


1.相同字段 不同属性的转换  如age
2.相同字段相同属性的转换   如name
3.不同类型不同字段的转换  如sex

 

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Demo0 {
    private  Long age;
    private  String name;
    private  String sex;

    private String hobby;
}
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Demo implements Serializable {
    private  Integer age;
    private  String name;
    private  Enums enums;
    private String love;

}

 

配置类,原理是利用clasloader:

 

package com.example.demo.demoTest;


import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.Mappings;
import org.mapstruct.factory.Mappers;

import java.util.List;


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

    })
    Demo0 domain2dto(Demo demo);

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

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

 

编译后的代码如下:看完后就会发现,妈妈再也不用担心我set,get了

 

public class PersonConverterImpl implements PersonConverter {
    public PersonConverterImpl() {
    }

    public Demo0 domain2dto(Demo demo) {
        if (demo == null) {
            return null;
        } else {
            Demo0 demo0 = new Demo0();
            demo0.setHobby(demo.getLove());
            demo0.setName(demo.getName());
            demo0.setAge(this.versionConvert(demo.getAge()));
            return demo0;
        }
    }

    public List<Demo0> domain2dt(List<Demo> demo) {
        if (demo == null) {
            return null;
        } else {
            List<Demo0> list = new ArrayList(demo.size());
            Iterator var3 = demo.iterator();

            while(var3.hasNext()) {
                Demo demo1 = (Demo)var3.next();
                list.add(this.domain2dto(demo1));
            }

            return list;
        }
    }
}

 

MapSturct 是一个生成类型安全, 高性能且无依赖的 JavaBean 映射代码的注解处理器(annotation processor)。

抓一下重点:

    1.注解处理器

    2.可以生成 JavaBean 之间那的映射代码

    3.类型安全, 高性能, 无依赖性

4.入门很简单。我是基于 Maven 来进行项目 jar 包管理的
5.生成的代码是对立的, 没有运行时的依赖。
 6.由于不需要进行反射, 其性能是很高的(无论是spring还是appache  的BeanUtil.cpoy还是Cglib的BeanCpoier都是用的反射)

 



 

posted @ 2021-09-15 23:18  余生请多指教ANT  阅读(282)  评论(0编辑  收藏  举报