朵小喵儿|七种对象复制工具类,你最看好哪个?( 五 )
其实 Dozer 可以很好跟 Spring 框架整合 , 我们可以在 Spring 配置文件提前配置 , 后续我们只要引用 Dozer 的相应的 Bean, 使用方式也是一行代码 。
Dozer 与 Spring 整合 , 我们可以使用其 DozerBeanMapperFactoryBean , 配置如下:
DozerBeanMapperFactoryBean支持设置属性比较多 , 可以自定义设置类型转换 , 还可以设置其他属性 。
另外还有一种简单的方法 , 我们可以在 XML 中配置 DozerBeanMapper:
Spring 配置完成之后 , 我们在代码中可以直接注入:
@AutowiredMapper mapper;public void objMapping(StudentDTO studentDTO) {// 直接使用StudentDO studentDO =mapper.map(studentDTO, StudentDO.class);}注解方式Dozer 注解方式相比 XML 配置来说功能很弱 , 只能完成字段名不一致的映射 。
上面的代码中 , 我们可以在 DTO 的 no 字段上使用 @Mapping 注解 , 这样我们在使用 Dozer 完成转换时 , 该字段属性将会被复制 。
@Datapublic class StudentDTO {private String name;private Integer age;@Mapping("number")private String no;private List subjects;private Course course;private String createDate;}虽然目前注解功能有点薄弱 , 不过后看版本官方可能增加新的注解功能 , 另外 XML 与注解可以一起使用 。
最后 Dozer 底层本质上还是使用了反射完成属性的复制 , 所以执行速度并不是那么理想 。
orikaorika也是一个跟 Dozer 类似的重量级属性复制工具类 , 也提供诸如 Dozer 类似的功能 。 但是 orika 无需使用繁琐 XML 配置 , 它自身提供一套非常简洁的 API 用法 , 非常容易上手 。
首先我们引入其最新的依赖:
基本使用方法如下:
// 省略其他设值代码// 这里先不要设值时间// studentDTO.setCreateDate("2020-08-08");MapperFactory mapperFactory = new DefaultMapperFactory.Builder().build();MapperFacade mapper = mapperFactory.getMapperFacade();StudentDO studentDO = mapper.map(studentDTO, StudentDO.class);这里我们引入两个类 MapperFactory 与 MapperFacade , 其中 MapperFactory 可以用于字段映射 , 配置转换器等 , 而 MapperFacade 的作用就与 Beanutils 一样 , 用于负责对象的之间的映射 。
上面的代码中 , 我们故意注释了 DTO 对象中的 createDate 时间属性的设值 , 这是因为默认情况下如果没有单独设置时间类型的转换器 , 上面的代码将会跑错 。
另外 , 上面的代码中 , 对于字段名不一致的属性 , 是不会复制的 , 所以我们需要单独设置 。
下面我们就设置一个时间转换器 , 并且指定一下字段名:
MapperFactory mapperFactory = new DefaultMapperFactory.Builder().build();ConverterFactory converterFactory = mapperFactory.getConverterFactory();converterFactory.registerConverter(new DateToStringConverter("yyyy-MM-dd"));mapperFactory.classMap(StudentDTO.class, StudentDO.class).field("no", "number")// 一定要调用下 byDefault.byDefault().register();MapperFacade mapper = mapperFactory.getMapperFacade();StudentDO studentDO = mapper.map(studentDTO, StudentDO.class);上面的代码中 , 首先我们需要在 ConverterFactory 注册一个时间类型的转换器 , 其次我们还需要再 MapperFactory 指定不同字段名的之间的映射关系 。
推荐阅读
- 朵小喵儿|2021年迎来考验,美国企业或将再次入局,国产手机
- 朵小喵儿|国产手机,2021年迎来考验,美国企业或将再次入局
- 朵小喵儿|突破旗舰封锁,魅族今年性能旗舰亮新玩法,销量真稳了
- 朵小喵儿|小天才手表背后,是成人世界的焦虑
- 朵小喵儿|主板维修必备!海量主板电路图+CPU程序下载
- 朵小喵儿|如何成为制造大国?曹德旺一语中的:先把“这个”取消再说
- 朵小喵儿|蔚来总部临时办公大楼预计下月启用 位于合肥经开区
- 朵小喵儿|腾讯AI Lab高级研究员宋林峰:图到文本生成任务中的通用型图结构信息保存法
- 朵小喵儿|突发!特朗普政府考虑将国内最大芯片制造商中芯国际列入贸易黑名单
- 朵小喵儿|硬件捡垃圾33期
