当前位置:首页 > 开发 > 移动开发 > 正文

Dozer 深层次复制

发表于: 2012-05-07   作者:jayluns   来源:转载   浏览:
摘要: 最近在做项目上遇到了一些小问题,因为架构在做设计的时候web前段展示用到了vo层,而在后台进行与数据库层操作的时候用到的是Po层。这样在业务层返回vo到控制层,每一次都需要从po-->转化到vo层,用到BeanUtils.copyProperties(source, target)只能复制简单的属性,因为实体类都配置了hibernate那些关联关系,所以它满足不了现在的需求,但后发现还有个很
最近在做项目上遇到了一些小问题,因为架构在做设计的时候web前段展示用到了vo层,而在后台进行与数据库层操作的时候用到的是Po层。这样在业务层返回vo到控制层,每一次都需要从po-->转化到vo层,用到BeanUtils.copyProperties(source, target)只能复制简单的属性,因为实体类都配置了hibernate那些关联关系,所以它满足不了现在的需求,但后发现还有个很好用的工具  DOzer 这家伙还挺好玩的,可以配置各种格式的数据转换。
而且也可以直接复制实体中包含 集合或者其他对象的实体,下面来看看这玩意。
一:
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的集成加入以下代码即可;

<dependency>
	<groupId>net.sf.dozer</groupId>
	<artifactId>dozer</artifactId>
	<version>5.0</version>
</dependency>
<net.sf.dozer>5.0</net.sf.dozer>

<dependency>
	<groupId>net.sf.dozer</groupId>
	<artifactId>dozer</artifactId>
	<version>${net.sf.dozer}</version>
</dependency>



二:dozer还可以灵活使用各种xml的方式去配置复制数据的类型,
以下是官方文档,有需要的同志可以去看看。附上架包。
http://dozer.sourceforge.net/documentation/springintegration.html

Dozer 深层次复制

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
大多数女人说,没有感情是不能做爱的,也就是爱情的前提论。但对爱情前提论具有讽刺意味的是妓女,
2 复制
SQL Server中的高可用性(3)----复制 在本系列文章的前两篇对高可用性的意义和单实例下的高可用性
3 复制
原文链接地址:http://www.cnblogs.com/lyhabc/p/3888702.html 最近把大学时候的ORACLE教程书本翻出
Dozer是一个开源的、实现JavaBean与JavaBean之间映射的框架。它可以方便地从一个对象拷贝属性值到另
http://www.cnblogs.com/artech/archive/2010/10/20/1857086.html 关于CLR内存管理一些深层次的讨论
--浅复制 class Resume:ICloneable { private string UserName; private string Sex; private int A
--浅复制 class Resume:ICloneable { private string UserName; private string Sex; private int A
深复制和浅复制都是拷贝一个对象,既然都是拷贝二者有什么不同呢?我们来仔细分析一下。 我们在D盘
当初在学习《设计模式》的时候,遇到过这个问题,当时还不是很理解,现在回想一下,做个小小的总结
数据类型 类型的分类 所有的类型都可以划分为两类:值类型和引用类型. 值类型和引用类型的区别在于使
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号