java dozer 官网,Dozer数据对象转换神器

首先,为什么要进行数据转换?

在一个分层的体系结构中,经常会使用DTO、PO、VO等封装数据,封装数据到特定的数据对象中,然而在很多情况下,某层内部的数据是不允许传递到其它层,不允许对外暴露的,特别是在分布式的系统中,内部服务的数据对外暴露,也不允许不相关的数据传入到本服务,所以需要对数据对象进行转换。

其次,为什么要使用Dozer?

前期对于很多程序员来说,数据转换都是通过手工编写转换工具类或工具方法来实现的,这样不仅没有针对性而且工作量很大,编写工具类重用性差,而且不灵活。所以,急需要使用一个通用的映射工具,通过配置或少量的编码就可以轻松的实现数据对象之间的转换,Dozer就是这样的映射工具,它具有通用性,灵活性,可重用性和可配置等特点,并且是开源的。

开始使用Dozer,下载Dozer发布包,将dozer.jar添加到你的classpath下,同时需要添加几个dozer运行时的依赖包(google一下)到你的classpath下。当然,如果你的项目使用Maven,只需要将下面的依赖配置粘贴到你的项目中即可,

net.sf.dozer

dozer

5.5.1

如果你的项目中使用的是gradle,只需要将下面的依赖配置粘贴到gradle的配置文件中即可,

compile "net.sf.dozer:dozer:5.5.1"

现有一个UserDTO、一个UserVO,需要将DTO中的数据转换到VO中,具体的代码如下:

e847b1d4eb50

Paste_Image.png

主要示例代码如下:

e847b1d4eb50

Paste_Image.png

输出结果如下:

e847b1d4eb50

Paste_Image.png

本示例代码中需要新建一个dozerBeanMapping.xml文件,并将该文件放入src下,示例配置如下:

e847b1d4eb50

Paste_Image.png

重要提示,如果DTO和VO中的属性名称相同,并且不需要做特殊的数据映射,则不需要dozerBeanMapping.xml,dozer的执行引擎会自动(如果配置true,默认是true)匹配映射相同名称的属性,且只需要如下声明

Mapper mapper = new DozerBeanMapper();

即可。同时,需要注意的是,在实际应用中不建议每次都创建一个新Mapper的实例,一个系统只需要有一个DozerBeanMapper实例。如果结合Spring的DI,只需要添加如下配置即可,

e847b1d4eb50

Paste_Image.png

从上面创建对象可以看出,DozerBeanMapper的构造函数接收一个List类型的映射配置集合,也就是可以有多个映射文件。

dozerBeanMapping.xml中配置了class-a和class-b分别用于配置两个要互相转换的类(需要加包名),field标签用于配置两个类的属性,a代表class-a类的属性,b代表class-b类的属性,a与a中间是属性名称,只要配置好a和b之后,dozer会将a的值转换给b,Dozer支持的转换类型如下:

Primitive to Primitive Wrapper

Primitive to Custom Wrapper

Primitive Wrapper to Primitive Wrapper

Primitive to Primitive

Complex Type to Complex Type

String to Primitive

String to Primitive Wrapper

String to Complex Type if the Complex Type contains a String constructor

String to Map

Collection to Collection

Collection to Array

Map to Complex Type

Map to Custom Map Type

Enum to Enum

Each of these can be mapped to one another: java.util.Date, java.sql.Date, java.sql.Time, java.sql.Timestamp, java.util.Calendar, java.util.GregorianCalendar

String to any of the supported Date/Calendar Objects.

Objects containing a toString() method that produces a long representing time in (ms) to any supported Date/Calendar object.

Primitive表示基本类型,Wrapper表示包装类型,Complex Type表示复杂类型。

Dozer还支持其它类型之间的相互转换,具体请参考Dozer官网:http://dozer.sourceforge.net/

上面的示例代码中,mobileNo转换后,前三和后四都使用了*进行了脱敏,是因为配置了set-method,该配置可以指定转换的方法,这里指定的方法是setMobileNoWithMask,该方法如下:

e847b1d4eb50

Paste_Image.png

上面的createdAt转换后由String类型变成了一个日期类型,是因为配置了date-format,使用指定的日期格式(MM/dd/yyyy HH:mm:ss)进行了格式化。

Dozer可以指定是否单向转换、是否排除某些属性不转换、递归转换等,Dozer的强大远不止这些,在真正需要特殊处理的时候,可以查看官方的文档进行配置即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值