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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值