点击上方“芋道源码”,选择“设为星标”
做积极的人,而不是积极废人!
源码精品专栏
摘要: 原创出处 http://www.iocoder.cn/Spring-Boot/MapStruct/ 「芋道源码」欢迎转载,保留摘要,谢谢!
1. 概述
2. 快速入门
3. 集成 Lombok
4. @Mapping
5. IDEA MapStruct 插件
666. 彩蛋
本文在提供完整代码示例,可见 https://github.com/YunaiV/SpringBoot-Labs 的 lab-55 目录。
原创不易,给点个 Star 嘿,一起冲鸭!
1. 概述
友情提示:MapStruct 和 Spring Boot 没有直接关系,单纯放在这个系列。
为了让应用的代码更易维护,我们往往会将项目进行分层。在《阿里巴巴 Java 开发手册》中,推荐分层如下图:
分层之后,每一层都有自己的领域模型,即不同类型的 Bean:
DO(Data Object):与数据库表结构一一对应,通过DAO层向上传输数据源对象。
DTO(Data Transfer Object):数据传输对象,Service或Manager向外传输的对象。
BO(Business Object):业务对象。由Service层输出的封装业务逻辑的对象。
等等...
那么,进行就需要这些对象的转换。例如说:
// 从数据库中查询用户
UserDO userDO = userMapper.selectBy(id);
// 对象转换
UserBO userBO = new UserBO();
userBO.setId(userDO.getId());
userBO.setUsername(userDO.getUsername());
// ... 还有其它属性
显然,手动进行对象的转换,虽然执行性能很高,但是开发效率非常低下,且可能会存在漏写的情况。因此,我们会选择借助框架或是工具来实现对象的转换,例如说:
友情提示:如果胖友对如下工具的性能对比感兴趣,可以阅读 Performance of Java Mapping Frameworks 文章。
Spring BeanUtils
Apache BeanUtils
Dozer
Orika
MapStruct
ModelMapper
JMapper
艿艿个人比较喜欢 MapStruct,原因是它基于 JSR 269 的 Java 注解处理器,自动生成对象的代码,使用便捷,性能优秀。例如说: