`
jayluns
  • 浏览: 143964 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Dozer 深层次复制

    博客分类:
  • J2EE
阅读更多
最近在做项目上遇到了一些小问题,因为架构在做设计的时候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小例子-bean复制

    需要lib[dozer-5.0.jar, commons-lang.jar],有需要的请猛击下载

    复制bean的开源工具Dozer

    NULL 博文链接:https://gaojiewyh.iteye.com/blog/1528587

    dozer-5.5.1-API文档-中英对照版.zip

    赠送jar包:dozer-5.5.1.jar; 赠送原API文档:dozer-5.5.1-javadoc.jar; 赠送源代码:dozer-5.5.1-sources.jar; 赠送Maven依赖信息文件:dozer-5.5.1.pom; 包含翻译后的API文档:dozer-5.5.1-javadoc-API文档-...

    dozer-5.5.1.jar

    dozer-5.5.1.jar dozer-5.5.1.jar dozer-5.5.1.jar dozer-5.5.1.jar

    dozer的使用实例

    内含dozer的完整实例,以及jar包。dozer比BeanUtils更灵活,同时可以很容易地跟spring集成。也可以用注解@Mapping("asstManagerId")来代替xml配置

    dozer的eclipse插件

    dozer的eclipse插件,使用该插件可以可视化编辑对应属性,简化你的编码工作

    dozer-user-guide

    dozer是一种JavaBean的映射工具,类似于apache的BeanUtils

    org.dozer JAR 包(实现java bean mapper)

    dozer是一款优秀的java bean映射开源框架,完成深度转换Bean&lt;-&gt;Bean的Mapper实现

    javaEE的对象拷贝工具dozer

    该文件是拷贝对象工具dozer相关的jar包和dozer的配置用法的详细说明,简洁实用。

    dozer(PDF)

    有关于dozer的用法  毕业了~ 所有资料拿出来分享~ 难免有错误~多见谅~

    dozer-5.3.2-src.zip

    dozer是一种JavaBean的映射工具,类似于apache的BeanUtils。但是dozer更强大,它可以灵活的处理复杂类型之间的映射

    dozer5.2 jar包

    下载内容包含 commons-beanutils-1.7.0.jar commons-collections.jar commons-lang-2.5.jar dozer-5.2.0.jar等

    dozer复杂类型测试类.zip

    dozer 的配置Mapping,包含普通映射配置,List复杂类型配置。ReqParam.json 是转换类的参数值,StringUtils 读取文件。

    springboot-dozer

    dozer是一种JavaBean的映射工具,类似于Apache的BeanUtils。它可以灵活地处理复杂类型之间的映射。不但可以进行简单的属性映射、复杂的类型映射、双向映射、递归映射等,并且可以通过XML配置文件进行灵活的配置。 ...

    dozer 3.0.2

    好用简洁的开源mac osx下的菜单栏管理软件,完美替代Bartender

    dozer5.5.1 ( 可集成spring 及 OSGi )

    dozer5.5.1 ( 可集成spring 及 OSGi ) , 不论在spring及osgi 下均可使用 包含所有5.5.1 所依赖的jar包,可根据需求添加。

    Dozer 使用

    NULL 博文链接:https://bruceliu02.iteye.com/blog/1771227

    Dozer详解

    NULL 博文链接:https://zhizizhishou0104.iteye.com/blog/1965547

    dozer-5.5.1-API文档-中文版.zip

    赠送jar包:dozer-5.5.1.jar; 赠送原API文档:dozer-5.5.1-javadoc.jar; 赠送源代码:dozer-5.5.1-sources.jar; 赠送Maven依赖信息文件:dozer-5.5.1.pom; 包含翻译后的API文档:dozer-5.5.1-javadoc-API文档-...

    dozer-5.5.0.jar

    dozer5.5.0.jar

Global site tag (gtag.js) - Google Analytics