这篇文章是本人在阅读Dozer官方文档(5.5.1版本,官网已经一年多没更新了)的过程中,整理下来我认为比较基础的应用场景。
本文中提到的例子应该能覆盖JavaBean映射的大部分场景,希望对你有所帮助。
概述
Dozer是什么?
Dozer是一个JavaBean映射工具库。
它支持简单的属性映射,复杂类型映射,双向映射,隐式显式的映射,以及递归映射。
它支持三种映射方式:注解、API、XML。
安装
引入jar包
maven方式
如果你的项目使用maven,添加以下依赖到你的pom.xml即可:
net.sf.dozer
dozer
5.4.0
非maven方式
如果你的项目不使用maven,那就只能发扬不怕苦不怕累的精神了。
使用Dozer需要引入Dozer的jar包以及其依赖的第三方jar包。
Eclipse插件
Dozer有插件可以在Eclipse中使用(不知道是否好用,反正我没用过)
使用
将Dozer引入到工程中后,我们就可以来小试一番了。
实践出真知,先以一个最简单的例子来展示Dozer映射的处理过程。
准备
我们先准备两个要互相映射的类
NotSameAttributeA.java
public class NotSameAttributeA {
private long id;
private String name;
private Date date;
// 省略getter/setter
}
NotSameAttributeB.java
public class NotSameAttributeB {
private long id;
private String value;
private Date date;
// 省略getter/setter
}
这两个类存在属性名不完全相同的情况:name 和 value。
Dozer的配置
为什么要有映射配置?
如果要映射的两个对象有完全相同的属性名,那么一切都很简单。
只需要直接使用Dozer的API即可:
Mapper mapper = new DozerBeanMapper();
DestinationObject destObject =
mapper.map(sourceObject, DestinationObject.class);
但实际映射时,往往存在属性名不同的情况。
所以,你需要一些配置来告诉Dozer应该转换什么,怎么转换。
注:官网着重建议:在现实应用中,最好不要每次映射对象时都创建一个Mapper实例来工作,这样会产生不必要的开销。如果你不使用IoC容器(如:spring)来管理你的项目,那么,最好将Mapper定义为单例模式。
映射配置文件
在src/test/resources目录下添加dozer/dozer-mapping.xml文件。
标签中允许你定义和,对应着相互映射的类。
标签里定义要映射的特殊属性。需要注意和对应,和对应,聪明的你,猜也猜出来了吧。
xsi:schemaLocation="http://dozer.sourceforge.net
http://dozer.sourceforge.net/schema/beanmapping.xsd">
org.zp.notes.spring.common.dozer.vo.NotSameAttributeA
org.zp.notes.spring.common.dozer.vo.NotSameAttributeB
name
value
与Spring整合
配置 DozerBeanMapperFactoryBean
在src/test/resources目录下添加spring/spring-dozer.xml文件。
Dozer与Spring的整合很便利,你只需要声明一个DozerBeanMapperFactoryBean,
将所有的dozer映射配置文件作为属性注入到mappingFiles,
DozerBeanMapperFactoryBean会加载这些规则。
spring-dozer.xml文件范例
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi