而且也可以直接复制实体中包含 集合或者其他对象的实体,下面来看看这玩意。
一:
package com.kingdee.ais.core.util; import org.dozer.DozerBeanMapper; import org.dozer.Mapper; import org.springframework.beans.BeanUtils; /** yong_jiang * * dozer单例的wrapper. * * dozer在同一jvm里使用单例即可,无需重复创建. * 但Dozer4.0自带的DozerBeanMapperSingletonWrapper必须使用dozerBeanMapping.xml作参数初始化,因此重新实现. * * 实现PO到VO的深层次复制 */ public class DozerMapperSingleton { private static Mapper instance; private DozerMapperSingleton() { //shoudn't invoke. } public static synchronized Mapper getInstance() { if (instance == null) { instance = new DozerBeanMapper(); } return instance; } } 用的时候直接获取实例就OK了, AgentContractInfo info=new AgentContractInfo ();//假设这个对象是有值的 AgentContract acr = new AgentContract(); DozerMapperSingleton.getInstance().map(info, acr); //这样 info对象中的所有属性复制到info中去了 ** :值得注意的是,在hibernate的配置中,大多都用了延迟加载, lazy=“true”,在用dozer的时候要保证你实体的值一定是存在有值的,才能复制成功。 Agent agent = advAgentDao.loadById(Agent.class, info.getAgent().getAgentId()); 上面这个loadById 如果在配置文件中,设置了lazy,那么agent这个对象复制到其他对象中肯定会有问题, agent对象中的值只有在真正用到它的时候才会有值,光拿他对象是不行的。相信大家应该知道这个小问题。
在看看dozer与maven的集成加入以下代码即可;
net.sf.dozer dozer 5.0 5.0 net.sf.dozer dozer ${net.sf.dozer}
二:dozer还可以灵活使用各种xml的方式去配置复制数据的类型,
以下是官方文档,有需要的同志可以去看看。附上架包。
http://dozer.sourceforge.net/documentation/springintegration.html