BeanUtil与BeanCopier与mapstruct的简单使用


前言

提示:这里就随便使用A类和B类进行测试:

import lombok.Data;
import java.util.List;
@Data
public class A {
    private String name;
    private List<Integer> ids;
}
import lombok.Data;
import java.util.List;
@Data
public class B {
    private String name;
    private List<String> ids;
}

接下来就开始测试这三种工具类。


一、使用BeanUtil

1.测试

代码如下(示例):此时报错的行数为second.getIds().forEach(System.out::println);空指针异常,这个工具类只赋值成功了B类的name,而ids则是null。

public class BeanUtilDemo {
    public static void main(String[] args) {
        A first = new A();
        first.setName("demo");
        first.setIds(Arrays.asList(1, 2, 3));

        B second = new B();
        BeanUtils.copyProperties(first, second);
        second.getIds().forEach(System.out::println);
    }

}

2.使用BeanCopier

代码如下(示例):此时报错为second.getIds().forEach(System.out::println);这一行,问题为类型转化异常
在这里插入图片描述

public class CglibDemo {
    public static void main(String[] args) {
        A first = new A();
        first.setName("demo");
        first.setIds(Arrays.asList(1, 2, 3));

        B second = new B();
        final BeanCopier beanCopier = BeanCopier.create(A.class, B.class, false);
        beanCopier.copy(first,second,null);
		second.getIds().forEach(System.out::println);
    }
}

3.使用mapstruct

idea做配置:-Djps.track.ap.dependencies=false;否则会出现java.lang.ClassNotFoundException: Cannot find implementation for XXX

在这里插入图片描述

写转化接口

import org.mapstruct.Mapping;
import org.mapstruct.factory.Mappers;

@Mapper
public interface ABMapper {
 
    ABMapper INSTANCE = Mappers.getMapper( ABMapper.class );

    B aToB(A aa);
}

具体实现

public class MapstructDemo {
    public static void main(String[] args) {
        A first = new A();
        first.setName("aaa");
        first.setIds(Arrays.asList(1, 2, 3));
        B second = ABMapper.INSTANCE.aToB(first);
        second.getIds().forEach(System.out::println);
    }
}

总结

提示:在使用mapstruct的时候,如果出现属性名不一致的情况,可以手动替换,否则的话会使得属性名相同的也无法赋值。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值