在微服务中整合MapStruct
- 背景
在SpringBoot项目中,我们通常会使用BeanUtils.copyProperties
来实现对象属性拷贝。但是BeanUtils.copyProperties
的缺点很明显,如果对象中的字段发生了变化,就会导致拷贝失败,就会在项目中留下潜在的bug。 MapStruct介绍
- GitHub地址
- 官方文档
- MapStruct 是用于生成类型安全,高性能和无依赖 bean映射代码的注释处理器,使用时只需要定义一个映射器接口来声明任何需要的映射方法
- 在进行数据转换时,如果源和目标实体中映射属性的类型不同,则 MapStruct将应用自动转换
使用方法
Maven导入
org.mapstruct
mapstruct
1.3.0.Final
定义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())
还没有评论,来说两句吧...