【mapstruct】mapstruct的一些用法

最基础的mypstruct的用法,此处不再赘述,这里讲两种mypstruct的另外一些用法。

嵌套映射

所谓嵌套映射,就是说你传入的对象是A,要转换成B,但是嘞,A或者B里的某个要映射的字段,是属于A或者B的对象字段C中,如A.name -> B.student.name,这种情况属于嵌套映射,需要在@Mapping()的source或者target中加入该字段的名字即可。
如图所示[1]:
在这里插入图片描述

指定自定义实现

遇到更复杂的情况,可能用嵌套或者expression不够用了的话,就需要自定义一个实现类。
我这里和[1]中的略有不同的是,我这里Mapper接口上的注解和他略有不同,经测试是可以使用的,代码示例如下:

@Mapper(componentModel = "spring")
public interface Converter {
    Person convert(StudentDO studentDO);


}

自定义实现

@Component
public class ConverterDecorator implements Converter{

	@Autowired
	private Converter converter;
	
	Person convert(StudentDO studentDO){
		return converter.convert(student);
	}
}

注意,我的这个方式,需要把注入spring的bean改为ConverterDecorator ,而不是原来的接口Converter。在使用转换器时,注入和使用ConverterDecorator 而不是Converter 。

文章[1]中的方式,需要将ConverterDecorator 中的构造器声明为公有,否则编译会报错。

经测试示例如下:

@Component
@Mapper(componentModel = "spring")
@DecoratedWith(ContentConverterDecorator.class)
public interface Converter {
    Person convert(StudentDO studentDO);


}

自定义实现

public class ConverterDecorator implements Converter{

	@Autowired
	private Converter converter;
	
    public ConverterDecorator() {
    }
    public ConverterDecorator(Converter converter) {
        this.converter = converter;
    }
	
	Person convert(StudentDO studentDO){
		return converter.convert(student);
	}
}

参考文献
[1],MapStruct最详细的使用教程,别在用BeanUtils.copyProperties ()
[2],mapstruct 详解及使用教程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值