orika简介
在工作中,我们经常涉及到对象的DTO、DO等对象的转换。对于这些对象的转换,我们除了自己写大量的get/set方法外,还可以借助orika这样的Bean映射工具来帮我们完成。
方式1
/**
* MapperFacade 用于dto ->entity的转换
*
* @author FrozenWatermelon
* @date 2020/7/11
*/
@Configuration
public class OrikaConfig {
@Bean
public MapperFactory mapperFactory() {
return new DefaultMapperFactory.Builder().build();
}
@Bean
public MapperFacade mapperFacade() {
return mapperFactory().getMapperFacade();
}
}
使用
@Autowired
private MapperFacade mapperFacade;
EsLogisticsRecordBO esLogisticsRecordBO = mapperFacade.map(logisticsRecord, EsLogisticsRecordBO.class);
方式2
/**
* 对orika进行简单的封装
*/
public class BeanMapper {
private static MapperFactory mapperFactory;
private static MapperFacade mapperFacade;
static {
mapperFactory = new DefaultMapperFactory.Builder().build();
mapperFacade = mapperFactory.getMapperFacade();
// 利用SPI,注册Bean的转换规则
ServiceLoader<BeanMapperRegistry> serviceLoader = ServiceLoader.load(BeanMapperRegistry.class);
for (BeanMapperRegistry beanMapperRegistry : serviceLoader) {
beanMapperRegistry.registry(mapperFactory);
}
}
public static <S, T> T map(S sourceObj, Class<T> targetClass) {
return mapperFacade.map(sourceObj, targetClass);
}
public static <S, T> List<T> mapAsList(Iterable<S> sourceObj, Class<T> targetClass) {
return mapperFacade.mapAsList(sourceObj, targetClass);
}
}
使用
OrderDTO orderDTO = new OrderDTO("1", "kfc", "南京路", "666");
UserDTO userDTO = new UserDTO("1", "小王");
System.out.println(BeanMapper.map(orderDTO, OrderDO.class));
System.out.println(BeanMapper.map(userDTO, UserDO.class));
感谢
https://blog.csdn.net/weixin_44335140/article/details/122845733