Bean对象复制工具——MapStruct
2021/7/2 23:25:52
本文主要是介绍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
这篇关于Bean对象复制工具——MapStruct的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-02在 Objective-C 中strong 和 retain有什么区别-icode9专业技术文章分享
- 2024-11-02NSString 中的 hasPrefix 有什么作用-icode9专业技术文章分享
- 2024-11-02在 C 和 Objective-C 中inline的用法是什么-icode9专业技术文章分享
- 2024-11-02文件掩码什么意思?-icode9专业技术文章分享
- 2024-11-02在 Git 提交之前运行 composer cs-fix 命令怎么实现-icode9专业技术文章分享
- 2024-11-02为 Composer 的 cs-fix 命令指定一个目录怎么实现-icode9专业技术文章分享
- 2024-11-02微信公众号开发中怎么获取用户的 unionid-icode9专业技术文章分享
- 2024-11-01lip-sync公司指南:一文读懂主要玩家和技术
- 2024-11-01Anthropic的新RAG方法——提升大型语言模型在特定领域的表现
- 2024-11-01UniApp 中组件的生命周期是多少-icode9专业技术文章分享