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