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
在后续的内容中,我们讨论如何得到映射统计数据。
分享到:
相关推荐
最近在研究Webservice的时候遇到一个问题,把java对象转化问json后传过去,接受的是String类型,怎么恢复到原来的java对象呢,后来再一个项目中看到了转换方法,转换顺序为javaBean--jsonObject--jsonString,还原...
【标题】"NTsky(提供JavaBean)v1.0-ntskynewsv1.0javabean-project"指的是一个特定的软件开发项目,其中包含了JavaBean的实现。JavaBean是Java编程语言中的一种组件模型,它遵循特定的规范,允许开发者创建可重用的...
1)JSP+javabean+DAO(Ajax:anywhere) 2)Struts+spring+hibernate3(AJax:DOJO) 3)JSF+richfaces+seam+EJB 总共3个完整的实例,并配有需求分析~~~~~~~~,绝对经典!
【信息办公学校教务管理系统(jsp+servlet+javabean)-school-project】是一个基于Java技术栈的教务管理软件,主要采用了jsp、servlet和javabean三大核心技术,旨在为教育机构提供一套高效、便捷的信息化管理解决方案...
【新闻文章】NTsky新闻发布(提供JavaBean)v1.0-ntskynewsv1.0javabean是一款基于Java技术的新闻发布系统,主要用于帮助企业或组织实现高效、便捷的新闻发布和管理。JavaBean是Java编程中的一种重要组件模型,它在这...
5. **Spring框架集成**:现代Java开发往往采用Spring框架,JavaBean可以作为Spring Bean进行管理,通过依赖注入(DI)实现组件之间的解耦。Spring的AOP(面向切面编程)功能还可以用于日志记录、事务管理等。 6. **...
【新闻文章NTsky新闻发布(提供JavaBean)v1.0-ntskynewsv1.0javabean.rar】是一个软件发布包,主要针对的是新闻发布的功能,特别提到了它提供了JavaBean组件。JavaBean是Java编程语言中的一种特殊类,主要用于构建可...
标题中的“新闻文章NTsky新闻发布(提供JavaBean)v1.0-ntskynewsv1.0javabean.zip”和描述中的“[新闻文章]NTsky新闻发布(提供JavaBean)v1.0_ntskynewsv1.0javabean.zip”传达了同一个信息,即该压缩包文件包含了一个...
【标题】:基于JSP、Servlet和JavaBean的MVC架构在员工管理系统中的应用 【描述】:在软件开发中,MVC(Model-View-Controller)架构模式被广泛应用于构建Web应用程序,尤其是员工管理系统这样的业务系统。在这个...
基于javabean-jsp-servlet框架开发的网上购物系统--毕业论文设计 该毕业论文设计的主要目的是基于javabean-jsp-servlet框架开发一个网上购物系统,旨在研究和实现一个基于javabean-jsp-servlet的电子商务系统。该...
dozer是一种JavaBean的映射工具,类似于Apache的BeanUtils。它可以灵活地处理复杂类型之间的映射。不但可以进行简单的属性映射、复杂的类型映射、双向映射、递归映射等,并且可以通过XML配置文件进行灵活的配置。 ...
JSON转javabean(pojo)利器-附件资源
《NTsky新闻发布系统基于JavaBean的实现详解》 NTsky新闻发布系统是一款基于Java技术构建的新闻信息发布平台,其核心特点在于提供了JavaBean组件,使得开发者能够更方便地进行功能扩展和二次开发。在这个版本v1.0中...