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