Dozer-Mapping
Dozer-Mapping入门
一、dozer简介:
Dozer是一个JavaBean映射工具库。
它支持简单的属性映射,复杂类型映射,双向映射,隐式显式的映射,以及递归映射。
它支持三种映射方式:注解、API、XML。
它是开源的,遵从Apache 2.0 协议
二、dozer的简单映射
1.第一个映射
前提:两个数据对象具有相同的属性名称
Mappermapper = new DozerBeanMapper();
DestinationObject destObject = mapper.map(sourceObject,DestinationObject.class);
执行这个Dozer映射以后,新的目标对象的实例将会有源对象属性的值,如果映射的属性的数据类型不相同
,Dozer映射引擎将会自动执行数据类型转换,到此为止,我已经完成了第一个Dozer映射。
2.通过XML文件指示用户映射文件
前提:两个不同类型的数据对象,有不同的属性名称
解决思路:添加一个类映射到你的XML映射文件中,这些映射文件在使用过程中被Dozer映射引擎解析。
Dozer映射引擎是有向的,只需要在xml文件中配置一个方向的映射(源对象类型到目标对象类型OR目标对象类型到源对象类型)
提示:相同名称的属性Dozer会自动完成映射
dozer-mapping.xml文件如下
<?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.nethttp://dozer.sourceforge.net/schema/beanmapping.xsd"><configuration><stop-on-errors>true</stop-on-errors><date-format>MM/dd/yyyyHH:mm</date-format><wildcard>true</wildcard></configuration><mapping><class-a>yourpackage.yourSourceClassName</class-a><class-b>yourpackage.yourDestinationClassName</class-b><field><A>yourSourceFieldName</A><B>yourDestinationFieldName</B></field></mapping>othercustom class mappings would go here.......</mappings>
三、Dozer 使用
Dozer映射的实现方法
Mapper mapper = new DozerBeanMapper();DestinationObject destObject = mapper.map(sourceObject,DestinationObject.class);orDestinationObject destObject = newDestinationObject(); mapper.map(sourceObject, destObject);
1、通过xml映射
上面有代码-。-
1.1基本属性映射
1.1.1隐式属性的映射
匹配属性的名称是自动进行的,有相同名称的属性可以不再xml中配置
1.1.2简单映射
两个属性有不同的名称,可以被映射如下
<field>
<a>one</a>
<b>onePrime</b>
</field>
1.1.3递归映射(双向)
Dozer支持类级别的递归映射,如果你的映射类中有一些作为属性的复杂的类型定义,Dozer将会在映射文件中
寻找类级别的映射,如果没有找到这些类之间的映射,Dozer将会映射复杂类型中具有同名称的属性的值。
1.2其他类型映射
(日后边用边学)
2、通过注解映射
使用注释的显而易见的原因是为了避免重复字段和方法在你的名字映射代码。注释可以把在映射属性本身从而减少的
数量代码。然而在某些情况下当注释应该避免,甚至无法使用。一些是以下几点:
2.1. 你正在映射文的类,不在你的控制范围内,而在dozer库中;
2.2. 映射是相当复杂,需要很多的配制;
在第一种情况下你可以映射或第三方dto和JAXB生成实体不可能把注释放进去。在第二种情况下有选择的将大量的
多行注释或隔离某些重复的实体名称的映射代码。过多标注bean可能有阅读和理解的困难。
ps:注解支持Dozer是实验性的,并且还不支持技术复杂的映射。然而,在最简单的映射情况下,用注解还是比XmL配制
和API方便
我可以把@Mapping标注放在属性的getter方法或直接放在属性上,如果Dozer发现,这是一个双向的映射,这就意味着,
放一次注解,就可以创建双向的映射,类型映射(例如String-long)将会自动进行,全局 定制的转换也可以被解析,
注释只能工作在转换对象在默认通配的情况下
public class SourceBean {privateLong id;privateString name;@Mapping("binaryData")
privateString data;
@Mapping("pk")publicLong getId() {return this.id;}public String getName() {return this.name;}}
public class TargetBean {private String pk;private String name;private String binaryData;public void setPk(String pk) {this.pk = pk;}public void setName(String name) {this.name = name;}}
3、通过api映射
import staticorg.dozer.loader.api.FieldsMappingOptions.*;import staticorg.dozer.loader.api.TypeMappingOptions.*;...BeanMappingBuilder builder = newBeanMappingBuilder() {protectedvoid configure() {mapping(Bean.class, Bean.class, TypeMappingOptions.oneWay(),mapId("A"),mapNull(true)).exclude("excluded").fields("src", "dest",copyByReference(),collectionStrategy(true,RelationshipType.NON_CUMULATIVE),hintA(String.class),hintB(Integer.class),FieldsMappingOptions.oneWay(),useMapId("A"),customConverterId("id")).fields("src", "dest",customConverter("org.dozer.CustomConverter"));}};
构造的builder对象被传到DozerBeanMapper实例中,可以添加多个Builder对象
DozerBeanMappermapper = new DozerBeanMapper();
mapper.addMapping(builder);
最后不要忘记了对FieldsMappingOptions和TypeMappingOptins类的静态引入。
借鉴于http://blog.csdn.net/whhahyy/article/details/48594657
Dozer-Mapping相关推荐
- Dozer 轻松高效玩转DTO(Data Transfer Object)
现状 对于分布式系统,需要在不同系统之间传递与转换域对象.因为我们不希望外部公开内部域对象,也不允许外部域对象渗入系统.传统上,数据对象之间的映射通过手工编码(getter/setter)的方式实现, ...
- SpringBoot集成Dozer
一.什么是Dozer? Dozer是一种Java Bean到Java Bean的映射器,递归地将数据从一个对象复制到另一个对象,它是一个强大的,通用的,灵活的,可重用的和可配置的开源映射框架. 说白点 ...
- JavaEE_领域模型命名规约 与 dozer 的简单使用介绍
参考文档: DOZER开发手册总结 http://blog.csdn.net/whhahyy/article/details/48594657 使用Dozer优雅的将DO转换成VO http://ww ...
- 轻松高效玩转DTO(Data Transfer Object)
点击蓝色"程序猿DD"关注我哟 加个"星标",不忘签到哦 转载自公众号:日拱一兵 关注我,回复口令获取可获取独家整理的学习资料: - 001:领取<Spr ...
- Domain Driven Design and Development In Practice--转载
原文地址:http://www.infoq.com/articles/ddd-in-practice Background Domain Driven Design (DDD) is about ma ...
- dozer对象Mapping框架
pom.xml配置(包含与spring的集成) <dependency><groupId>net.sf.dozer</groupId><artifactId& ...
- java反射po转vo_三步走使用Dozer (Do,Po,Vo转换工具)
第一步 把依赖加上 com.github.dozermapper dozer-core 6.5.0 第二步,不同属性名的在被转换bean上(Do)注解@Mapping("vo里该字段名称&q ...
- jaxb和dozer简介
一.jaxb是什么 JAXB是Java Architecture for XML Binding的缩写.可以将一个Java对象转变成为XML格式,反之亦然. 我们把对象与关系数据库 ...
- java dozer 深度_java – Dozer深度映射设置为Set
免责声明: Mapping deep properties with intermediate collections in dozer已经提出了同样的问题,但没有接受答案(我的案例没有正确答案). ...
- Dozer 使用总结
http://seyaa.iteye.com/blog/762494 1.1 什么是dozer? Dozer 是一个对象转换工具. Dozer可以在JavaBean到JavaBean之间进行递归数据复 ...
最新文章
- centos设置网络自动启动
- Git 常用命令总结
- [解题报告]Triangle Wave
- 21%转化率,海淘用户都在买什么?
- Maven仓库搭建(二):GitHub、又拍云、七牛云存储
- RGB和RGBQUAD的区别
- 前端学习(902):this指向问题
- harbor重置mysql密码_Harbor密码重置 密码修改 admin密码重置
- 前端动画 wow.js 效果
- 华为云MySQL数据库外网使用
- OpenCV3学习(6.2)——霍夫(Hough)变换:霍夫线变换HoughLine,霍夫圆变换HoughCircles
- 开发文档模板_究竟什么样的开发流程是规范的?
- poj2236 并查集
- 微分算法 非侵入式负荷识别_基于差量特征提取与模糊聚类的非侵入式负荷监测方法...
- 现代计算机发展各个阶段的主要特点是什么,计算机的发展历史 现代计算机发展的6个阶段...
- 惯性张量惯性矩惯性积、转动惯量、面积转动惯量、质量转动惯量
- 基于Android studio开发的图灵智能聊天机器人
- 计算机星形拓扑结构,星型拓扑结构
- Python:peewee常用操作CRUD
- 【数模系列】02_三大相关系数+Python代码
热门文章
- 友善之臂中的mini2440 GPIO相关函数操作
- web网页设计实例作业 ——我的家乡-四川(9页) HTML+CSS+JavaScript 学生DW网页设计作业成品
- window.showModalDialog()用法
- 360安全桌面和360购物
- 转自小木虫关于论文汇报的PPT
- Picasa的使用想法及对其他几个看图软件的粗略考察
- Vue——生命周期钩子调用时机
- php伪静态网前台页面,如何让Discuz门户频道页支持伪静态
- ADV-369 第二点五个不高兴的小明 动态规划入门
- 薄膜干涉、增透膜增反膜、劈尖和牛顿环(大学物理笔记)