在微服务中整合MapStruct

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/wangchengming1/article/details/102588742
  • 背景
    在SpringBoot项目中,我们通常会使用BeanUtils.copyProperties来实现对象属性拷贝。但是BeanUtils.copyProperties的缺点很明显,如果对象中的字段发生了变化,就会导致拷贝失败,就会在项目中留下潜在的bug。

  • MapStruct介绍

    • GitHub地址
    • 官方文档
    • MapStruct 是用于生成类型安全,高性能和无依赖 bean映射代码的注释处理器,使用时只需要定义一个映射器接口来声明任何需要的映射方法
    • 在进行数据转换时,如果源和目标实体中映射属性的类型不同,则 MapStruct将应用自动转换
  • 使用方法

    • Maven导入
    <dependencies>
        <dependency>
            <groupId>org.mapstruct</groupId>
            <artifactId>mapstruct</artifactId>
            <version>1.3.0.Final</version>
        </dependency>
    </dependencies>
    
    • 定义Entity和VO
    @Data
    public class User {
        
        private String username;
        private String password;
        private Integer age;
    }
    
    @Data
    public class UserVO {
        
        private String username1;
        private String password1;	
    }
    
    • 定义mapper接口
    @Mapper(componentModel = "spring")
    public interface UserToUserVOMapper{
     	@Mappings({
    		@Mapping(target = "username",source = "username1")
    		@Mapping(target = "password",source = "password1")
    	 })
    	public UserVO userVO()
    }
    
    • 测试
    @Autowired
    private UserToUserVOMapper userToUserVOMapper;
    
    public void test() {
            UserVO vo = new UserVO();
            vo.setUserName("beck");
            vo.setPassWord("1111");
            User user = userToUserVOMapper.to(vo);// 通过to方法得到 User
            UserVO vo1 = userToUserVOMapper.form(user);// 通过from方法得到UserVO,既反转to方法。
    }
    
    • 个人理解
      其实@Mapping这个注解的意思就是target.setField(source.getField())

猜你喜欢

转载自blog.csdn.net/wangchengming1/article/details/102588742