package com.mossle.core.mapper;
import java.util.List;
import ma.glasnost.orika.MapperFacade;
import ma.glasnost.orika.MapperFactory;
import ma.glasnost.orika.converter.builtin.PassThroughConverter;
import ma.glasnost.orika.impl.DefaultMapperFactory;
import ma.glasnost.orika.metadata.TypeFactory;
/**
* 复制对象属性的工具类.
*
* @author Lingo
*/
public class BeanMapper {
/** 实例. */
private static MapperFacade mapper;
static {
// 如果src中属性为null,就不复制到dest
MapperFactory mapperFactory = new DefaultMapperFactory.Builder()
.mapNulls(false).build();
// 如果属性是Object,就只复制引用,不复制值,可以避免循环复制
mapperFactory.getConverterFactory().registerConverter(
new PassThroughConverter(Object.class));
mapper = mapperFactory.getMapperFacade();
}
/**
* 把src中的值复制到dest中.
*/
public void copy(Object src, Object dest) {
mapper.map(src, dest);
}
/**
* 指定复制的src和target的class.
*/
public <S, D> void copy(S src, D target, Class<S> srcClass,
Class<D> targetClass) {
mapper.map(src, target, TypeFactory.valueOf(srcClass),
TypeFactory.valueOf(targetClass));
}
/**
* 复制list.
*/
public <S, D> List<D> copyList(List<S> src, Class<D> clz) {
return mapper.mapAsList(src, clz);
}
}