本文出自:http://blog.csdn.net/hongchangfirst
dozer是一种JavaBean的映射工具,类似于apache的BeanUtils。但是dozer更强大,它可以灵活的处理复杂类型之间的映射。不但可以进行简单的属性映射、复杂的类型映射、双向映射、递归映射等,并且可以通过XML配置文件进行灵活的配置。
大体来说它可以把一个对象转化为另一个对象,这两个对象之间会有一定的映射规则。
如你有两个类,
class ForeignName
{
private String firstName;
private String lastName;
}
class ChineseName
{
private String firstName;
private String lastName;
}
比如一个中文名字“Hongchang Zhang”,在ForeignName中
firstName="Hongchang";
lastName="Zhang";
但在中国我们的firstName应该是姓,也就是说firstName="Zhang",我们可以采用dozer的map规则进行映射,把ForeignName中的firstName映射为ChineseName的lastName。下述为nameMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<mappings xmlns="http://dozer.sourceforge.net"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://dozer.sourceforge.net
http://dozer.sourceforge.net/schema/beanmapping.xsd">
<mapping>
<class-a>ForeignName</class-a>
<class-b>ChineseName</class-b>
<field>
<a>firstName</a>
<b>lastName</b>
</field>
<field>
<a>lastName</a>
<b>firstName</b>
</field>
</mapping>
</mappings>
上边的映射很容易看明白,接下来我们看看具体怎么映射:
ForeignName hc_z = new ForeignName();
hc_z.firstName="Hongchang";
hc_z.lastName="Zhang";
DozerBeanMapper mapper = new DozerBeanMapper();
List<String> mappers = new ArrayList<String>();
mappers.add("nameMapper.xml");
mapper.setMappingFiles(mappers);
ChineseName z_hc = new ChineseName();
mapper.map(hc_z, z_hc);
System.out.println(z_hc.firstName+ " " + z_hc.lastName);
可以看到,很自然的我们得到了"Zhang Hongchang",当然我们要包含以下包:
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.dozer.DozerBeanMapper;
有人可能会说 了,为什么要这么麻烦呢?当然这个例子可能有点杀鸡用牛刀了,但是它的好处在于自动化映射,而不是你程序自己去映射。