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的时候,如果出现属性名不一致的情况,可以手动替换,否则的话会使得属性名相同的也无法赋值。


版权声明:本文为weixin_42386578原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。