JavaBean之间拷贝利器-Dozer

JavaBean之间拷贝利器-Dozer 映射数据类型不一致,级联映射与自定义映射。
上次大概介绍了为什么要使用Dozer,以及对Dozer一个简单介绍。 今天我们来讨论如何使用Dozer映射复杂类型:

1. 数据类型不一致。

2. 级联映射。

3. 自定义映射。

在讨论之前,我们来说说一个朋友在上篇留言中提到的一个问题。估计大家应该都很关心。这个问题就是性能问题。Dozer其实底层使用了现成的BeanUtil,通过反射来映射,况且Dozer应用了Cache技术,应该比自个通过BeanUtils映射性能要好点。所以一般的应用应该不存在性能问题。

Dozer对于基本类型之间转换是不用配置的,比如Sting ------Integer ,只要属性名称相同就Ok了。

而常用的Date与String映射配置如下:

  mapping date-format="MM-dd-yyyy"
class-anet.blogjava.vincent.pojo.CustomerPo/class-a
class-bnet.blogjava.vincent.vo.CustomerVo/class-b
field
abirthday/a
bdateOfBirth/b
/field
/mapping

指明 CustomerPo里面的birthday对应CustomerVo里面的dateOfBirth.并且是Date与String之间双向映射。

对于属性名称不一致,也仅仅需要一个配置文件,如下:


  mapping
  class-anet.blogjava.vincent.pojo.CustomerPo/class-a
  class-bnet.blogjava.vincent.vo.CustomerVo/class-b
field
atype/a
btransferType/b
/field
 /mapping

指明 CustomerPo里面的type 对应CustomerVo里面的transferType.

而对以级联,比如CustomerPo里面的一个属性映射为CustomerVo里么一个对象的属性,下面的配置就可以了

mapping
  class-anet.blogjava.vincent.pojo.CustomerPo/class-a
  class-bnet.blogjava.vincent.vo.CustomerVo/class-b
field
atype/a
btransferType.type/b
/field
  /mapping

上面其实就是Dozer基本用法,也涵盖了大多数应用场景,可见基本不需要写代码,仅仅一个配置文件搞定,简单吧。

而对以更个性化的映射,就需要写代码了, 比如在CustomerPo中的into类型的transferId ,映射CustomerVo  String 类型transferType, 假如transferId =1 对应transferType=“immediateTranfer” 假如transferId =2 对应transferType=“scheduleTransfer” 反之亦然。就要写一个Customer的Map了, 如下:


import org.dozer.CustomConverter;

public class CustomerMap implements CustomConverter 
  ifsourceFieldValue == 2)
  
  }
  if
  if)
  
  }

  }
  return returnVale;
  }

}

然后在配置文件配置就Ok了 如下:

  mapping
  class-anet.blogjava.vincent.pojo.CustomerPo/class-a
class-bnet.blogjava.vincent.vo.CustomerVo/class-b
field custom-converter="net.blogjava.vincent.mapUtil.CustomerMap"
atype/a
  btransferType/b
  /field
  /mapping

下面就是一个完整的配置文件:

?xml version="1.0" encoding="UTF-8"?
mappings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://dozer.sourceforge.net E:dozerdozer-5.0-srcdozer-5.0srcsiteresourcesschemabeanmapping.xsd"
  xmlns="http://dozer.sourceforge.net"
  mapping  date-format="yyyy-MM-dd"
  class-anet.blogjava.vincent.pojo.UserInfo/class-a
  class-bnet.blogjava.vincent.vo.UserInfoVo/class-b
  field
  acolleage.name/a
  bschoolName/b
  /field
  /mapping
  mapping
  class-anet.blogjava.vincent.pojo.CustomerPo/class-a
  class-bnet.blogjava.vincent.vo.CustomerVo/class-b
field custom-converter="net.blogjava.vincent.mapUtil.CustomerMap"
  atype/a
  btransferType/b
  /field
  /mapping

/mappings

在后续的内容中,我们讨论如何得到映射统计数据。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值