其他分享
首页 > 其他分享> > Bean对象复制工具——MapStruct

Bean对象复制工具——MapStruct

作者:互联网

如果你喜欢一个女孩,就好好努力多挣钱,到时候多随点份子钱。

序言

  去年我不是写了一个反射工具类用来复制对象嘛,然后我就想到,这种问题怎么可能没有大佬解决呢?于是我就在网上找这样的工具类,发现这种对象copy的工具包还是挺多的。所以,我为什么要写个反射工具复制对象???
  然后网上又有人说使用对象复制工具影响效率,性能不好。不过我想有问题总会有大佬解决的。这不,看了众多的博客,这个工具MapStruct普遍都说好。所以我就也推荐一下这个工具,还是挺好用的。

相关代码放在这里:https://gitee.com/siumu/blog_code.git

MapStruct的使用

首先我们先引入MapStruct的依赖:

<!-- Bean复制工具MapStruct -->
<dependency>
    <groupId>org.mapstruct</groupId>
    <artifactId>mapstruct</artifactId>
    <version>1.4.2.Final</version>
</dependency>
<dependency>
    <groupId>org.mapstruct</groupId>
    <artifactId>mapstruct-processor</artifactId>
    <version>1.4.2.Final</version>
</dependency>

准备两个对象,用来复制。依然是去年那个项目,所以还是那两个类:

@Data
public class VblogUser {
    private Long id;             //主键
    private String username;     //用户名
    private String password;     //密码
    private String nickname;     //昵称
    private boolean enabled;     //是否禁用
    private String email;        //邮箱
    private String userface;     //头像
    private String regTime;      //注册时间
}

---------------------------------------------------------------------------

@Data
public class UserDTO {
    private Long id;             //主键
    private String username;     //用户名
    private String password;     //密码
    private String nickname;     //昵称
    private boolean enabled;     //是否禁用
    private String email;        //邮箱
    private String userface;     //头像
    private String regTime;      //注册时间
}

接下来我们来创建一个BeanCopyUtil接口:

@Mapper
public interface BeanCopyUtil {

    BeanCopyUtil INSTANCE = Mappers.getMapper(BeanCopyUtil.class);

    UserDTO userToUserDTO(VblogUser user);

}

就这样,我们只需要声明这一个接口,然后使用Mappers来创建一个接口的实例INSTANCE,在这个接口里只需要声明方法就完事。就是这么简单,其他什么都不需要写,我们只需要用这个INSTANCE调用这个方法就可以了。接下来我们直接看执行效果:
在这里插入图片描述
so easy!!!!
这时我们可能会问:如果对象的属性名不一致怎么办?这个工具当然也想到了,只需要一个小小的注解就解决了。我们做个实验试一试。我们把UserDTO改变一下属性,把这个regTime改成createTime,把userface改成avatar:

@Data
public class UserDTOPlus {
    private Long id;             //主键
    private String username;     //用户名
    private String password;     //密码
    private String nickname;     //昵称
    private boolean enabled;     //是否禁用
    private String email;        //邮箱
    private String avatar;       //头像
    private String createTime;   //注册时间
}

然后我们在BeanCopyUtil中声明一个方法:

@Mapper
public interface BeanCopyUtil {

    BeanCopyUtil INSTANCE = Mappers.getMapper(BeanCopyUtil.class);

    UserDTO userToUserDTO(VblogUser user);


    @Mapping(target = "avatar", source = "userface")
    @Mapping(target = "createTime", source = "regTime")
    UserDTOPlus userToUserPlus(VblogUser user);
}

使用注解@Mapping来映射不同的属性
在这里插入图片描述
我们可以看到,对象依然复制成功。

结语

  当然,大佬们推荐这个对象复制工具MapStruct不止这么一点点的功能,它还有更强大的功能,需要的话可以去官网看看。

以上代码在这里:https://gitee.com/siumu/blog_code.git

标签:String,MapStruct,private,class,Bean,复制,BeanCopyUtil,public
来源: https://blog.csdn.net/SiuMu_/article/details/118423661