mapstruct工具包的使用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mapstruct工具包的使用相关的知识,希望对你有一定的参考价值。

参考技术A 一、 工具介绍
一个用于对象转换为另外一个对象的java工具类,主要适用于两个对象的大部分属性名称都相同的场景。相比于Spring的BeanUtils.copyProperties()方法,还可以实现不同名称字段之间的属性赋值

二、使用步骤
以maven工程为例,引入如下依赖:

原理就是通过@Mapper注解的类会自动生成相应的实现类,根据方法上的注解生成对应的对象

注意:如果输入的多个对象有相同属性名的参数,且返回对象也刚好有相同属性名的参数,则必须指明哪个对象的相同属性名参数映射到返回对象中,否则会报错。

然后其他地方引用时,可以通过如下方式直接注入使用:

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

bean复制映射工具包mapstruct

简介

工作中经常会用到对象复制,属性覆盖等操作,除了常见的BeanUtil外,还有一个好用的编程式工具类mapstruct。

依赖

<dependency>
     <groupId>org.mapstruct</groupId>
     <artifactId>mapstruct-jdk8</artifactId>
     <version>1.1.0.Final</version>
</dependency>

使用demo

get和set用lombok自动生成了

@Data
public class Student 
    private Integer id;
    private String name;
    private Integer age;
    private String sex;


@Data
public class User 
    private Integer id;
    private String name;
    private Integer age;
    private String sex; 



import org.mapstruct.Mapper;
import org.mapstruct.Mappings;

@Mapper
public interface UserMapping 

	UserMapping instance = Mappers.get(UserMapping.class)


    /**
     * Student 转化为 User
     * @param Student
     * @return
     */
     User studentToUser(Student student);

在maven编译之后就可以看到在编译包中自动实现了对象复制

属性覆盖

也是差不多的操作,@MappingTarget指定被覆盖属性的目标对象

void studentToUser(@MappingTarget User user, Student student);

属性覆盖/转换

属性转换,这里以liststring互转为例

在build编译之后看到自动引用了类型转换的方法

也可以使用@Named注解指定转换的方法

@Mapper
public interface StudentMapper 
    StudentMapper INSTANCE = Mappers.getMapper(StudentMapper.class);

    @Mappings(
            @Mapping(source = "name1", target = "name2",defaultValue = "某某人"),
            @Mapping(target = "age2", expression = "java(java.lang.Integer.valueOf(student1.getAge1()))"),
            @Mapping(source = "createTime1", target = "createTime2", dateFormat = "yyyy-MM-dd HH:mm:ss:SSS"),
            @Mapping(source = "weight1", target = "weight2", numberFormat = "0.00"),
            @Mapping(target = "bloodType2", constant = "A 型血"),
            @Mapping(source = "sex1",target = "sex2",qualifiedByName = "getBySexEnum")
    )
    Student2 toStudent2(Student1 student1);

    @InheritConfiguration(name = "toStudent2")
    void updateStudent2(Student1 student1, @MappingTarget Student2 student2);

    @Named("getBySexEnum")
    default Integer getBySexEnum(SexEnum sexEnum)
        return sexEnum.getCode();
    

参考了文章
https://www.cnblogs.com/DDgougou/p/13365277.html

以上是关于mapstruct工具包的使用的主要内容,如果未能解决你的问题,请参考以下文章

mapstruct对象转换工具

mapstruct工具包的使用

Java实体映射工具MapStruct的使用

bean复制映射工具包mapstruct

实体映射最强工具类:MapStruct 真香!

丢弃掉那些BeanUtils工具类吧,MapStruct真香!!!