Orika,作为Java bean对象更简便、轻量和快速的映射实现框架,本质是使用字节码生成器创建开销最小的快速映射。
所以在包含较多属性的类对象之间拷贝数据时,Orika是能以更优的性能去替代传统的Apache或Spring的BeanUtils实现(底层使用反射实现,且为浅拷贝)。
基础使用:
1、Maven项目依赖包:pom文件直接依赖即可
ma.glasnost.orika orika-core1.4.6
2、确定用于拷贝数据的两个Bean对象:如下文的source和target参数对象
1)首先需要创建工厂对象
//创建工厂对象 MapperFactory MAPPER_FACTORY = new DefaultMapperFactory.Builder().build();
2)获取MapperFacade对象,进行实体对象的映射
(1)如果两个Bean对象之间的属性完全一致,直接进行步骤3的操作
(2)如果获取的目标Bean的属性与源Bean的属性名称不完全一致,需要进行匹配映射或者忽略一些属性的映射,则需要通过classMap的field()、exclude()方法分别处理,也可进行一些其他自定义处理操作,详情参考文末链接。
MapperFactory.classMap(source.getClass(), target.getClass())
.field("name", "userName") //字段不完全一致,需要进行映射
.field("email", "userEmail") //字段不完全一致,需要进行映射
.exclude("id") //不需要映射的字段,排除掉
.exclude("gender") //不需要映射的字段,排除掉
...
.byDefault().register();
(3)对象复制(使用map)
MAPPER_FACTORY.getMapperFacade().map(source, target);
(4)集合复制(使用mapAsList)
Listvos = MapperFactory.getMapperFacade().mapAsList(sourceList, T);
这里我简单编写了一个方法,可直接通过参数:mapFields和ignoreFields遍历映射名称不一致的属性和过滤不需要映射的属性:
public staticT copyProperties(Object source, T target, Map mapFields, String[] ignoreFields) { ClassMapBuilder
综上来说,Orika是日常开发中实现Java Bean拷贝的一种相当不错的选择,如果小伙伴们想了解Orika更高级的应用,可以参考:Orika参考文档



