最近在做项目上遇到了一些小问题,因为架构在做设计的时候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复制"中,我们将深入探讨Dozer库的使用方法以及它如何帮助我们高效地完成bean复制。 首先,Dozer的核心功能是提供对象之间的自动映射。在Java中,手动复制bean可能会导致代码冗余且易出错,...
Java EE对象拷贝工具Dozer是一款强大的数据映射库,它简化了在Java对象之间进行深度复制的过程。在软件开发中,特别是在业务层处理数据时,我们经常需要将一个对象的属性值复制到另一个对象中,Dozer提供了一个优雅...
解压后,将包含的插件文件复制到Eclipse的`dropins`目录下。然后重启Eclipse,插件就会自动安装并可供使用。 2. **配置与启用**: 安装完成后,确保在Eclipse的首选项设置中启用Dozer插件。在`Window -> Preferences...
Dozer是一个JavaBean的映射工具,用于在Java对象之间转换属性值。它类似于Apache的BeanUtils,但Dozer特别优化了复杂对象的映射,可以将一个对象的字段映射到另一个对象,这在分层架构中尤其有用。在分层架构中,...
**Dozer库详解与使用实例** Dozer是一个强大的Java Bean到Java Bean映射库,它极大地简化了对象之间的数据转换工作。与Apache的BeanUtils相比,Dozer提供了更高级别的抽象,灵活性更高,并且能够更好地处理复杂的...
4. **支持深拷贝**:除了基本的属性映射,Dozer还能处理嵌套对象和集合的映射。 5. **类型转换**:Dozer内置了一些标准的类型转换器,同时允许用户自定义转换器来处理特定的类型转换需求。 6. **事件监听**:提供...
Dozer是一款功能强大但使用简单的Java Bean到Java Bean映射工具,能够递归地从一个对象复制数据到另一个对象。通常,这些Java Beans会是不同复杂度的类型。 **1.1 下载** Dozer可以方便地通过其官方网站进行下载。...
通过定义映射规则,Dozer可以自动地将源对象的属性值复制到目标对象的相应属性上,而无需手动编写繁琐的赋值代码。例如,如果有一个`User`类和一个`UserProfile`类,它们都有`name`、`email`等相同属性,Dozer就能...
Dozer不仅支持简单的属性映射,还能处理复杂的类型转换,包括集合、自定义类型以及深拷贝等。 ### 1. Dozer的安装与引入 在项目中使用Dozer,首先需要将其依赖添加到构建工具中。对于Maven项目,可以在`pom.xml`...
3. **深度映射**:Dozer支持深层次的对象映射,可以递归地映射嵌套的对象和集合。 4. **双向映射**:它可以实现双向映射,即不仅可以从前端数据映射到后台数据,还可以从后台数据反向映射回前端数据。 5. **类型...
赠送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文档-...
赠送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:强大的JavaBean映射工具》 在Java开发中,对象间的属性映射是一项常见的任务,尤其是在数据转换和接口交互中。Apache的BeanUtils是这类问题的一个基础解决方案,但当面临更复杂的映射需求时,其功能就显得...
dozer-5.5.1.jar dozer-5.5.1.jar dozer-5.5.1.jar dozer-5.5.1.jar
"dozer5.5.1 ( 可集成spring 及 OSGi )" 指的是Dozer库的一个特定版本,即5.5.1,它具有与Spring框架和OSGi容器集成的能力。这意味着开发人员可以将Dozer作为数据映射工具,在这些环境中无缝地使用。 **描述解析:*...
Dozer的核心功能在于对象到对象的映射,它可以自动地将一个对象的属性值复制到另一个对象的相应属性上,极大地简化了开发工作。在5.3.2版本中,这个特性得到了进一步优化,提供了更灵活的映射规则和更强的定制能力。...
这个工具在处理复杂的数据转换时非常有用,尤其是在数据绑定、数据复制或者在服务层与表现层之间传递数据时。Dozer 提供了丰富的映射功能,包括基本类型、集合、自定义对象等之间的映射,并支持深度映射和双向映射。...
dozer是一款优秀的java bean映射开源框架,完成深度转换Bean<->Bean的Mapper实现