需求:用spring提供的beancopy不能满足我们的需求,DO,VO,DTO之间的转化
例如 vo中包含time String属性和list<VOA>属性
而 do中包含time Date属性和list<DOA>属性
类VOA和类DOA类不同而字段属性都相同
但是使用spring自带的
BeanUtils.copyProperties(do, vo);会产生相同类型可以赋值而名字相同但是类型不同的不能赋值
所以改进的办法是使用Orika
在maven中引入依赖
核心代码:
MapperFactory mapperFactory = new DefaultMapperFactory.Builder().build();
MapperFacade mapper = mapperFactory.getMapperFacade();
VO vos = mapper.map(dos, VO.class);
此时dos中的值与vos中的值一样
虽然dos与vos中的属性的类型不同名字相同但是依旧可以赋值
实例代码:
public static void main(String [] args)
{
DO dos = new DO();
dos.setId("1");
dos.setDate(new Date());
List<DOA> list =new ArrayList<DOA>();
for(int i=0;i<3;i++) {
DOA doa = new DOA();
doa.setAge(i + "");
doa.setName(i + "");
list.add(doa);
}
dos.setList(list);
MapperFactory mapperFactory = new DefaultMapperFactory.Builder().build();
MapperFacade mapper = mapperFactory.getMapperFacade();
VO vos = mapper.map(dos, VO.class);
System.out.println(vos);
}
控制台打印:
VO(id=1, date=Fri Dec 28 15:42:14 CST 2018, list=[VOA(name=0, age=0), VOA(name=1, age=1), VOA(name=2, age=2)])
注意VO类
@Data
public class VO {
private String id;
private String date;
private List<VOA> list;
}
而DO类
@Data
public class DO {
private String id;
private Date date;
private List<DOA> list;
}