- 浏览: 1036551 次
- 性别:
- 来自: 成都
文章分类
最新评论
-
繁星水:
Useful!!
Object-C之(Null)与(Bool) -
pacer123:
请问注解@ApiModelProperty 在哪个jar包下面 ...
Micro Service工具集之Swagger:可测试的样式化API文档 -
sucheng2016:
这东东真的好用么/
对象转换利器之Dozer -
zzq0324:
http://git.oschina.net/zzq0324/ ...
基于Spring-WS的Restful API的集成测试 -
lrz0534:
你好,我在maven上面下载了swagger-springmv ...
Micro Service工具集之Swagger:可测试的样式化API文档
对象转换利器之Dozer
- 博客分类:
- Java学习
在Java的世界中,经常会涉及到需要在2个对象中进行转换,比如说:
通常情况下,程序员们会自己弄一个Transformer层,来做对象之间的转换。估计很多同志在自己的项目代码中都可以看到Transformer的身影。但是,复杂的Java对象之间的转换并不是一个非常容易的问题,因为你需要不停的检测某个属性值是否为null,你需要做属性类型的转换,Date对应到String, String对应到Int等等。这就导致了Transformer的臃肿以及对程序员生产力的浪费。Dozer就是对懒(you)惰(xiu)程序员在这个问题上的通用解决方案。
Dozer是一个开源的,通用的,健壮的,灵活的,易于重用的,可配置的Java对象Mapping框架 。这个定义中的每一个形容词对程序员都非常亲切. (作者注: Dozer虽好,请不要贪恋, 因为任何对象之间的转换都会带来维护和性能的开销,能不做对象转换还是不要做了,跑不掉的时候,请选用Dozer)。
Dozer怎么用
使用Dozer的流程非常清楚:
假设在一个系统中,模块A中客户的类型是User,而模块B中客户的类型是Customer, 现在模块B需要接受模块A中客户,并转换为自己模块的客户类型Customer。
配置User和Customer属性的之间的对应关系
调用Mapper获取转换后的对象:
Dozer做对象转换有什么特点
Dozer可理解的类型转换有:
• Primitive to Primitive Wrapper
• Primitive to Custom Wrapper
• Primitive Wrapper to Primitive Wrapper
• Primitive to Primitive
• Complex Type to Complex Type
• String to Primitive
• String to Primitive Wrapper
• String to Complex Type if the Complex Type contains a String constructor
• String to Map
• Collection to Collection
• Collection to Array
• Map to Complex Type
• Map to Custom Map Type
• Enum to Enum
• Each of these can be mapped to one another: java.util.Date, java.sql.Date, java.sql.Time, java.sql.Timestamp, java.util.Calendar, java.util.GregorianCalendar
• String to any of the supported Date/Calendar Objects.
• Objects containing a toString() method that produces a long representing time in (ms) to any supported Date/Calendar object.
Dozer官网地址:http://dozer.sourceforge.net/
是啊,一年没动了。好在当前的功能已经可以解决了我很大一坨的代码问题了。白衣兄的SpringSide有把它打包进去吗?
- 调用SOAP Web服务,需要把自己的Domain对象转换为Soap服务的Jaxb对象请求,
- 在分层级SOA架构中,2个层级之间Domain对象的转换,
- 在分布式系统中,每个模块使用自己的领域对象,防止自己的业务被其他模块的domain对象影响
通常情况下,程序员们会自己弄一个Transformer层,来做对象之间的转换。估计很多同志在自己的项目代码中都可以看到Transformer的身影。但是,复杂的Java对象之间的转换并不是一个非常容易的问题,因为你需要不停的检测某个属性值是否为null,你需要做属性类型的转换,Date对应到String, String对应到Int等等。这就导致了Transformer的臃肿以及对程序员生产力的浪费。Dozer就是对懒(you)惰(xiu)程序员在这个问题上的通用解决方案。
Dozer是一个开源的,通用的,健壮的,灵活的,易于重用的,可配置的Java对象Mapping框架 。这个定义中的每一个形容词对程序员都非常亲切. (作者注: Dozer虽好,请不要贪恋, 因为任何对象之间的转换都会带来维护和性能的开销,能不做对象转换还是不要做了,跑不掉的时候,请选用Dozer)。
Dozer怎么用
使用Dozer的流程非常清楚:
- 配置你需要mapping的类,以及类之间的属性之间的对应关系。
- 根据你的配置初始化Mapper
- 使用mapper.map(source, target.class)获取转换后的对象。
假设在一个系统中,模块A中客户的类型是User,而模块B中客户的类型是Customer, 现在模块B需要接受模块A中客户,并转换为自己模块的客户类型Customer。
public class User { private int userId; private String userName; public User(int userId, String userName) { this.userId = userId; this.userName = userName; } public int getUserId() { return userId; } public void setUserId(int userId) { this.userId = userId; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } } public class Customer { private int customerId; private String customerName; public int getCustomerId() { return customerId; } public String getCustomerName() { return customerName; } public void setCustomerId(int customerId) { this.customerId = customerId; } public void setCustomerName(String customerName) { this.customerName = customerName; } }
配置User和Customer属性的之间的对应关系
<?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">dia <mapping> <class-a>com.xianlinbox.dozer.source.User</class-a> <class-b>com.xianlinbox.dozer.destination.Customer</class-b> <field> <a>userId</a> <b>customerId</b> </field> <field> <a>userName</a> <b>customerName</b> </field> </mapping> </mappings>
调用Mapper获取转换后的对象:
public class DozerMapperTest { private DozerBeanMapper mapper; @Before public void setUp() throws Exception { mapper = new DozerBeanMapper(); mapper.setMappingFiles(Arrays.asList("dozer-bean-mappings.xml")); } @Test public void testMapping() throws Exception { User user = new User(1, "user1"); Customer customer = mapper.map(user, Customer.class); assertThat(customer.getCustomerId(),equalTo(1)); assertThat(customer.getCustomerName(),equalTo("user1")); } }
Dozer做对象转换有什么特点
- 默认属性Mapping,即如果属性名称一样, 就不需要显示配置,Dozer会自动处理。
- 自动做类型转换,即如果两个属性名称一样,即使类型不一样,在Dozer可理解范围内,帮你处理得妥妥的。Dozer可理解的类型范围非常广,这会极大的提升程序员的生产力
- 不必担心中间的null property,遇到null property,Dozer会把对应的所有属性全部设置为null,而不会抛NullPointerExeception。
Dozer可理解的类型转换有:
• Primitive to Primitive Wrapper
• Primitive to Custom Wrapper
• Primitive Wrapper to Primitive Wrapper
• Primitive to Primitive
• Complex Type to Complex Type
• String to Primitive
• String to Primitive Wrapper
• String to Complex Type if the Complex Type contains a String constructor
• String to Map
• Collection to Collection
• Collection to Array
• Map to Complex Type
• Map to Custom Map Type
• Enum to Enum
• Each of these can be mapped to one another: java.util.Date, java.sql.Date, java.sql.Time, java.sql.Timestamp, java.util.Calendar, java.util.GregorianCalendar
• String to any of the supported Date/Calendar Objects.
• Objects containing a toString() method that produces a long representing time in (ms) to any supported Date/Calendar object.
Dozer官网地址:http://dozer.sourceforge.net/
评论
4 楼
sucheng2016
2016-10-17
这东东真的好用么/
3 楼
jackyrong
2015-02-28
更新了,14年5.5.1版本
2 楼
ningandjin
2013-12-20
江南白衣 写道
可惜它好久不更新了。
是啊,一年没动了。好在当前的功能已经可以解决了我很大一坨的代码问题了。白衣兄的SpringSide有把它打包进去吗?
1 楼
江南白衣
2013-12-19
可惜它好久不更新了。
发表评论
-
关于并发的思考
2015-02-08 22:33 4339并发数 并发数和2个因 ... -
使用Hystrix守护应用(3)
2015-01-02 22:04 12876监控HystrixCommand 除了隔离依赖服务的调用外,H ... -
使用Hystrix守护应用(2)
2014-12-30 14:35 16817接上篇(http://ningandjiao.iteye.co ... -
使用Hystrix守护应用(1)
2014-12-30 14:28 15284Hystrix(https://github.com/Netf ... -
Mac下同时安装多个版本的JDK
2014-04-14 21:42 33240JDK8 GA之后,小伙伴们喜大普奔,纷纷跃跃欲试,想体验一下 ... -
性能测试工具之Gatling
2014-01-15 19:27 17297Gatling一直是久闻其名但 ... -
JavaMail测试工具之GreenMail
2014-01-08 19:13 7367不管现在各种Mock框架的运用有多广,我个人在写单元测试的时候 ... -
定制一个Gradle Plugin --- project-structure
2014-01-03 21:23 8494最近在项目中遇到一个 ... -
Restful Spring MVC应用的Request验证
2013-12-26 15:05 23368在开放平台的时候,尤其是坐Rest服务的时候,因为用户可以给你 ... -
Spring MVC中的异常处理
2013-12-25 13:13 24166在一个良好的Rest架构的应用中,所有的异常都应该有对应的Ht ... -
Spring 4.0升级小贴士
2013-12-22 19:40 11439随着Spring4.0的发布,很多同志估计都在考虑升级的事情了 ... -
Spring4.0给我们带来什么?
2013-12-22 17:13 45031JDK8 对JDK8的支持,这个目前来说还是探索性质,毕竟Ja ... -
RESTful API版本控制策略
2013-12-15 19:51 31740做RESTful开放平台,一方面其API变动越少, 对API调 ... -
基于Spring-WS的Restful API的集成测试
2013-11-28 19:41 9068在很多Java企业级应用中,Spring占据了非常重要的位置, ... -
TDD Of Spring JMS
2013-11-25 19:53 1760不知何时养成了习惯,在没有一个可运行的测试的时候,个人完全没有 ... -
Micro Service工具集之Swagger:可测试的样式化API文档
2013-09-28 19:55 44741在我之前的一篇博文中,介绍了Yammer开发团队贡献的开源微服 ... -
进击的Java开发
2013-07-14 20:48 5913今天在公司的邮件组中看到一组很有趣的讨论,这是我最喜欢目前公司 ... -
说说SpringBatch的领域概念
2013-06-21 20:32 3625谈到Spring Batch,会谈到 ... -
做项目时需要考虑的安全性问题
2013-04-16 20:20 4786在开发一个项目的时候,大家经常会忽略项目的安全性问题,有很多的 ... -
使用Gradle部署jar包到Maven中央库
2013-04-12 16:15 24164Maven作为目前Java界最好的Dependency管理系统 ...
相关推荐
Java EE对象拷贝工具Dozer是一款强大的数据映射库,它简化了在Java对象之间进行深度复制的过程。在软件开发中,特别是在业务层处理数据时,我们经常需要将一个对象的属性值复制到另一个对象中,Dozer提供了一个优雅...
支持Bean类型转换,前提是字段相同。支持List实体之间的类型转换,注意当source不能为null。
假设我们有源对象中的一个List字段`List<SourceItem>`,需要映射到目标对象的`List<TargetItem>`,Dozer会自动遍历源List,逐个将`SourceItem`对象映射成`TargetItem`,并添加到目标List中。这种映射机制使得即使...
4. 深度映射与自定义转换器:Dozer还支持对象嵌套的映射,即源对象的属性也是一个对象时,Dozer会递归地进行映射。如果需要自定义转换逻辑,可以通过实现`com.dozer.CustomConverter`接口并注册到Dozer中。 在...
Dozer支持双向映射,这意味着不仅可以将一个对象转换为另一个对象,还可以将这个转换过程逆向进行。这对于保持数据的一致性非常有用,但需要注意的是,双向映射可能导致循环引用,需要谨慎配置。 **性能优化** ...
Dozer是一个强大的Java对象映射框架,它的核心功能是将一个对象的属性值复制到另一个对象的相应属性上,这在处理对象持久化、服务接口转换、数据展示层与业务逻辑层之间转换等方面非常有用。其主要特性包括: 1. **...
4. **预览与测试**: 在编辑过程中,你可以实时预览映射结果,查看对象转换的效果,这有助于调试和优化映射逻辑。 ### 提升开发效率 1. **自动化代码生成**: Dozer插件可以自动生成所需的映射方法,减少手动编码的...
Dozer是一个JavaBean的映射工具,用于在Java对象之间转换属性值。它类似于Apache的BeanUtils,但Dozer特别优化了复杂对象的映射,可以将一个对象的字段映射到另一个对象,这在分层架构中尤其有用。在分层架构中,...
然后,你可以使用`map()`方法将一个对象转换为另一个对象。例如: ```java Mapper mapper = new DozerBeanMapper(); MySource source = new MySource(); MyDestination dest = mapper.map(source, MyDestination....
《Dozer 5.3.2:Java数据映射与校验利器》 在Java开发领域,数据转换和校验是常见的任务,尤其在处理不同系统间的数据交换时。Dozer是一个强大的开源库,专为解决此类问题而设计。本文将深入探讨Dozer 5.3.2版本的...
总的来说,Dozer 是一个强大且成熟的对象映射工具,它在处理复杂对象转换时表现出色。了解并熟练掌握 Dozer 可以提高开发效率,减少手动转换代码带来的错误。然而,随着技术的演进,开发者也需要持续关注其他新兴的...
总的来说,Dozer是一个功能全面、灵活易用的JavaBean映射工具,它为Java开发者提供了一种高效的方式来处理对象之间的数据转换,极大地提升了开发效率。对于那些对性能有较高要求且需要处理复杂对象映射的项目,Dozer...
对于需要频繁进行对象间数据转换的应用程序而言,Dozer能够显著提高开发效率并降低出错率。与手动编写转换逻辑相比,使用Dozer可以让开发者专注于业务逻辑而非繁琐的数据转换工作。 **2.3 入门指南** 在使用Dozer...
Dozer 是一个开源的 Java 对象到对象映射库,它能够帮助开发者在 Java 应用程序中将一个对象模型映射到另一个对象模型。这个工具在处理复杂的数据转换时非常有用,尤其是在数据绑定、数据复制或者在服务层与表现层...
"对象转换成JSON和Map"是一个核心话题,特别是在Java编程语言中,因为JSON(JavaScript Object Notation)是网络通信中广泛使用的轻量级数据交换格式,而Map则是一种通用的数据结构,用于存储键值对。下面我们将深入...
在Spring框架中,Dozer可以作为Bean之间的映射工具,简化数据绑定和对象转换过程。而OSGi环境下,Dozer的可集成性使得开发者可以在模块化的应用程序中灵活使用,各个模块可以通过Dozer实现数据交换,同时保持低耦合...
**标题解析:** "dozer 架包" 指的是 Dozer,这...总的来说,Dozer作为一个强大的对象映射工具,极大地简化了Java应用中数据模型转换的复杂度,提高了开发效率。对于处理前台和后台数据间的拷贝问题,它是理想的选择。
Dozer是一个强大的Java到Java数据映射库,它能够自动将对象模型从一个结构转换到另一个结构。这个“Dozer小试”可能是指一篇介绍如何使用Dozer进行对象映射实践的文章。博主在ITEYE上分享了这篇博客,通过实际示例...