- 浏览: 7960304 次
- 性别:
- 来自: 广州
-
文章分类
- 全部博客 (2425)
- 软件工程 (75)
- JAVA相关 (662)
- ajax/web相关 (351)
- 数据库相关/oracle (218)
- PHP (147)
- UNIX/LINUX/FREEBSD/solaris (118)
- 音乐探讨 (1)
- 闲话 (11)
- 网络安全等 (21)
- .NET (153)
- ROR和GOG (10)
- [网站分类]4.其他技术区 (181)
- 算法等 (7)
- [随笔分类]SOA (8)
- 收藏区 (71)
- 金融证券 (4)
- [网站分类]5.企业信息化 (3)
- c&c++学习 (1)
- 读书区 (11)
- 其它 (10)
- 收藏夹 (1)
- 设计模式 (1)
- FLEX (14)
- Android (98)
- 软件工程心理学系列 (4)
- HTML5 (6)
- C/C++ (0)
- 数据结构 (0)
- 书评 (3)
- python (17)
- NOSQL (10)
- MYSQL (85)
- java之各类测试 (18)
- nodejs (1)
- JAVA (1)
- neo4j (3)
- VUE (4)
- docker相关 (1)
最新评论
-
xiaobadi:
jacky~~~~~~~~~
推荐两个不错的mybatis GUI生成工具 -
masuweng:
(转)JAVA获得机器码的实现 -
albert0707:
有些扩展名为null
java 7中可以判断文件的contenttype了 -
albert0707:
非常感谢!!!!!!!!!
java 7中可以判断文件的contenttype了 -
zhangle:
https://zhuban.me竹板共享 - 高效便捷的文档 ...
一个不错的网络白板工具
http://ningandjiao.iteye.com/blog/1989838
在Java的世界中,经常会涉及到需要在2个对象中进行转换,比如说:
调用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)获取转换后的对象。
Dozer提供了2种方式去配置需要mapping的类,一种是基于XML,一种是基于API,API的方式是5.3版本才开始提供的,主要是为了解决xml方式不可动态修改mapping配置的问题。下面来看一个最基础的使用Dozer的例子:
假设在一个系统中,模块A中客户的类型是User,而模块B中客户的类型是Customer, 现在模块B需要接受模块A中客户,并转换为自己模块的客户类型Customer。
Java代码 收藏代码
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属性的之间的对应关系
Java代码 收藏代码
<?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获取转换后的对象:
Java代码 收藏代码
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/
在Java的世界中,经常会涉及到需要在2个对象中进行转换,比如说:
调用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)获取转换后的对象。
Dozer提供了2种方式去配置需要mapping的类,一种是基于XML,一种是基于API,API的方式是5.3版本才开始提供的,主要是为了解决xml方式不可动态修改mapping配置的问题。下面来看一个最基础的使用Dozer的例子:
假设在一个系统中,模块A中客户的类型是User,而模块B中客户的类型是Customer, 现在模块B需要接受模块A中客户,并转换为自己模块的客户类型Customer。
Java代码 收藏代码
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属性的之间的对应关系
Java代码 收藏代码
<?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获取转换后的对象:
Java代码 收藏代码
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/
发表评论
-
复习:强迫线程顺序执行方式
2019-01-03 23:42 1602方法1: 三个线程,t1,t2,t3,如果一定要按顺序执行, ... -
(转)不错的前后端处理异常的方法
2019-01-02 23:16 2027前言 在 Web 开发中, 我们经常会需要处理各种异常, 这是 ... -
info q的极客时间大咖说等资料下载
2018-08-15 08:40 3484info q的极客时间大咖说等资料下载,还有不少思维导图 链 ... -
CXF 客户端超时时间设置(非Spring配置方式)
2018-07-03 22:38 2248import org.apache.cxf.endpoint. ... -
(转)synchronized关键字画像:正确打开方式
2018-06-14 09:25 501https://mp.weixin.qq.com/s/b3Sx ... -
CountDownLatch的例子
2018-06-13 14:10 700public class StatsDemo { ... -
两道面试题,带你解析Java类加载机制
2018-06-12 16:29 626https://mp.weixin.qq.com/s/YTa0 ... -
Spring中获取request的几种方法,及其线程安全性分析
2018-06-11 09:03 679https://mp.weixin.qq.com/s/KeFJ ... -
内部类小结
2018-06-06 10:25 445https://mp.weixin.qq.com/s/hErv ... -
JVM虚拟机小结1
2018-06-04 20:43 5571 jps -l //列出详细的类名和进程ID 2)jps ... -
windows下自带命令行工具查看CPU资源情况等
2018-06-04 12:53 3114微软提供了不少命令行 ... -
(收藏)深入分析Java的序列化与反序列化
2018-05-30 15:21 628https://mp.weixin.qq.com/s/T2Bn ... -
apache common包中的序列化工具
2018-05-30 09:10 1851什么是序列化 我们的 ... -
JAVA8 JVM的变化: 元空间(Metaspace)
2018-05-24 22:30 974本文将会分享至今为至我收集的关于永久代(Permanent G ... -
(转)服务器性能指标(一)——负载(Load)分析及问题排查
2018-05-21 21:03 1384原创: Hollis Hollis 负载 ... -
(转)对象复用
2018-05-20 15:27 874public class Student { priv ... -
mapreduce中入门中要注意的几点
2018-05-06 08:59 680在 mapreduce中,比如有如下的词: I love b ... -
HDFS的基本操作
2018-05-02 21:47 948-mkdir 在HDFS创建目录 ... -
一个不错的开源工具类,专门用来解析日志头部的,好用
2018-05-02 20:00 778一个不错的开源工具类,专门用来解析日志头部的,好用。 http ... -
介绍个不错的RESTFUL MOCK的工具wiremock
2018-04-27 21:02 1915介绍个不错的RESTFUL MOCK的工具wiremock,地 ...
相关推荐
支持Bean类型转换,前提是字段相同。支持List实体之间的类型转换,注意当source不能为null。
Java EE对象拷贝工具Dozer是一款强大的数据映射库,它简化了在Java对象之间进行深度复制的过程。在软件开发中,特别是在业务层处理数据时,我们经常需要将一个对象的属性值复制到另一个对象中,Dozer提供了一个优雅...
假设我们有源对象中的一个List字段`List<SourceItem>`,需要映射到目标对象的`List<TargetItem>`,Dozer会自动遍历源List,逐个将`SourceItem`对象映射成`TargetItem`,并添加到目标List中。这种映射机制使得即使...
Dozer是一个强大的Java Bean到Java Bean映射库,它极大地简化了对象之间的数据转换工作。与Apache的BeanUtils相比,Dozer提供了更高级别的抽象,灵活性更高,并且能够更好地处理复杂的数据类型映射。在实际开发中,...
4. 深度映射与自定义转换器:Dozer还支持对象嵌套的映射,即源对象的属性也是一个对象时,Dozer会递归地进行映射。如果需要自定义转换逻辑,可以通过实现`com.dozer.CustomConverter`接口并注册到Dozer中。 在...
Dozer是一个强大的Java对象映射框架,它的核心功能是将一个对象的属性值复制到另一个对象的相应属性上,这在处理对象持久化、服务接口转换、数据展示层与业务逻辑层之间转换等方面非常有用。其主要特性包括: 1. **...
- **对象转Map方法**:Java没有内置的方法直接将对象转换为Map,但我们可以手动实现。这通常涉及遍历对象的属性并创建对应的键值对。也可以使用第三方库如Dozer或ModelMapper来简化这个过程。 - **自定义转换**:...
Dozer是一个开源库,它简化了Java对象之间的数据转换过程,而Dozer Eclipse插件则进一步扩展了这个功能,将这种便利性带入了Eclipse集成开发环境中。 ### 插件安装与配置 1. **下载与安装**: 首先,你需要从官方或...
Dozer是一个JavaBean的映射工具,用于在Java对象之间转换属性值。它类似于Apache的BeanUtils,但Dozer特别优化了复杂对象的映射,可以将一个对象的字段映射到另一个对象,这在分层架构中尤其有用。在分层架构中,...
Dozer 是一个强大的 Java 对象映射框架,它简化了对象到对象之间的转换工作,尤其在处理复杂的数据结构时。这个工具广泛应用于企业级应用,因为它可以极大地减少手动编写转换代码的工作量。在这个总结中,我们将深入...
《Dozer 5.3.2:Java数据映射与校验利器》 在Java开发领域,数据转换和校验是常见的任务,尤其在处理不同系统间的数据交换时。Dozer是一个强大的开源库,专为解决此类问题而设计。本文将深入探讨Dozer 5.3.2版本的...
Dozer是一款强大的Java到Java对象映射库,它可以帮助开发者在不同的对象模型之间进行数据转换。在处理复杂的数据结构时,Dozer提供了便捷的方式,减少了手动转换代码的工作量,使得代码更加简洁、可维护。Dozer不仅...
总的来说,Dozer是一个功能全面、灵活易用的JavaBean映射工具,它为Java开发者提供了一种高效的方式来处理对象之间的数据转换,极大地提升了开发效率。对于那些对性能有较高要求且需要处理复杂对象映射的项目,Dozer...
Dozer是一个开源的Java类库,用于将一个Java对象转换为另一个Java对象。下面我们将详细介绍如何使用Dozer库在Java项目中实现实体类转换。 首先,我们需要在pom.xml配置文件中引入Dozer库的依赖关系。pom.xml文件是...
Dozer 是一个开源的 Java 对象到对象映射库,它能够帮助开发者在 Java 应用程序中将一个对象模型映射到另一个对象模型。这个工具在处理复杂的数据转换时非常有用,尤其是在数据绑定、数据复制或者在服务层与表现层...
**标题解析:** "dozer 架包" 指的是 Dozer,这...总的来说,Dozer作为一个强大的对象映射工具,极大地简化了Java应用中数据模型转换的复杂度,提高了开发效率。对于处理前台和后台数据间的拷贝问题,它是理想的选择。
Dozer是一个强大的Java到Java数据映射库,它能够自动将对象模型从一个结构转换到另一个结构。这个“Dozer小试”可能是指一篇介绍如何使用Dozer进行对象映射实践的文章。博主在ITEYE上分享了这篇博客,通过实际示例...