Dozer使用总结
来源:互联网 发布:触摸屏校正软件 编辑:程序博客网 时间:2024/05/21 10:45
Dozer使用总结
1 概念
1.1 什么是dozer?
Dozer 是一个对象转换工具。
Dozer可以在JavaBean到JavaBean之间进行递归数据复制,并且这些JavaBean可以是不同的复杂的类型。
所有的mapping,Dozer将会很直接的将名称相同的fields进行复制,如果field名不同,或者有特别的对应要求,则可以在xml中进行定义。
更多详细请参考dozer官网:http://dozer.sourceforge.net/documentation/about.html
1.2 为什么要使用Dozer?
分析多层架构的J2EE系统,经常存在JavaBean直接的拷贝。比如我们在DAO层,通过Do取得业务层需要的数据,将这些数据传递给 Service层的VO。Do与VO就存在典型的值拷贝。
典型的解决方案就是手动拷贝,弊端很明显,代码中充斥大量Set 和Get方法,真正的业务被埋藏值与值的拷贝之中。另一种方案就是使用BeanUtil,但BeanUtil不够很好的灵活性,又时候还不得不手动拷贝。Dozer可以灵活的对对象进行转换,且使用简单。
注意:Dozer支持简单类型 复杂类型的双向递归映射。
1.3 如何得到Dozer 工具类jar包
1.点击下载:http://sourceforge.net/projects/dozer/files/
2.如果使用maven工具的话,在pom.Xml文件中加入:
加入你的构建路径既可以使用。
2 Dozer 支持的转换类型
Dozer支持
Primitive 基本数据类型 , 后面带 Wrapper 是包装类 Complex Type 是复杂类型
- 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 到复杂类型 , 如果复杂类型包含一个 String 类型的构造器
- 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.
3 Dozer使用(不与spring集成下)
3.1 dozer使用分类
根据有无映射文件和文件的多少,有三种方式:
第一种:该方式用于数据类型为基本类型,名称相同的对象映射
Mapper mapper = new DozerBeanMapper();
SourceObject sourceObject = new SourceObject();
DestinationObject destObject = (DestinationObject) mapper.map(sourceObject, DestinationObject.class);
DestinationObject destObject = new DestinationObject();
mapper.map(sourceObject, destObject);
第二种:该方式用于数据类型不一致,或者名称不相同或者有级联关系等情况下的映射,该方式可以添加多个配置文件dozerBeanMapping.xml、someOtherDozerBeanMappings.xml 等
List myMappingFiles = new ArrayList();
myMappingFiles.add("dozerBeanMapping.xml");
//myMappingFiles.add("someOtherDozerBeanMappin
DozerBeanMapper mapper = new DozerBeanMapper();
SourceObject sourceObject = new SourceObject();
mapper.setMappingFiles(myMappingFiles);
DestinationObject stObject=
(DestinationObject) mapper.map(sourceObject, DestinationObject.class);
第三种:该方式用于数据类型不一致,或者名称不相同或者有级联关系等情况下的映射,配置文件只有一个映射文件叫dozerBeanMapping.xml且在根目录下
Mapper mapper = DozerBeanMapperSingleton
SourceObject sourceObject = new SourceObject();
DestinationObject destObject = (DestinationObject) mapper.map(sourceObject, DestinationObject.class);
//or
//Mapper mapper = DozerBeanMapperSingleton
//DestinationObject destObject = new DestinationObject();
mapper.map(sourceObject, destObject);
3.2 举例说明:
假设我们现在有一个userDo类,如下:
package ce.dozer;
public class User {
一个userVo类,如下:
package ce.dozer;
public class UserVO {
}
一个性別枚舉类,如下:
public enum GenderType {
}
一个infoDo类,如下:
package ce.dozer;
import java.util.Date;
public class Info {
~~~~~~set\get~~~~~~~
一个infoVo类,如下:
package ce.dozer;
public class InfoVO {
在给出的示例中我们可以看到userDo与 userVo 中的字段对应关系
userVouserDo不同id(int)id(int) userName(String)name(String)名称不同password(String)password(String) Info(InfoVo)Info(Info)类型不同再看看infoDo与 infoVo 中的字段对应关系
综合上面的问题我们可以如下
infoVoinfoDo不同id(int)id(int)
解决方式:
3.2.1 字段名称不同映射配置
<mapping>
3.2.2 Date与String映射配置如下:
<mapping date-format="yyyy-MM-dd">
3.2.3 在示例中我们看到在userDo和userVo对象中关联了其他的对象,这个问题不用担心,因为对象名称相同dozer会为我们自动转换。而问题不在这,在与对象中有枚举类型,我们该怎么写配置呢?在这里我们就必须自己编写一个处理类来处理枚举与Integer的转换了(假设我们的处理类为util.EnumIntConverter),配置如下:
<configuration>
</configuration>
<mapping>
最终的dozerBeanMapping.xml 配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<mappings xmlns="http://dozer.sourceforge.net"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4 与spring的集成
4.1 1、dozer 要与spring集成需要将dozer交给spring管理,配置如下:
spring-dozer.xml<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
<list>
4.2 2、当我们的dozer交给了spring管理,当spring容器启动后我们可以将下面的代码添加到用于继承的基类中去:
private Mapper mapper ;
public Mapper getMapper() {
}
public void setMapper(Mapper mapper) {
}
4.3 3、在继承者类中就可以直接如下使用:
- Dozer 使用总结
- Dozer使用总结
- Dozer使用总结
- Dozer使用总结
- Dozer使用 整理
- Dozer使用 整理2
- Dozer使用教程
- dozer
- Dozer
- Dozer 使用 xml文件配置1
- Dozer 使用 xml文件配置2
- Dozer 使用 xml文件配置3
- Dozer 使用 xml文件配置4
- dozer简单认识和初步使用
- 使用dozer注意一点,涉及lombok.Data的@Data
- Dozer-实体类拷贝对象映射简单使用
- dozer-初识
- dozer-初识
- cocos2d 相关概念整理
- Shell变量和基础知识(二)
- Python 2.7和NLTK安装教程
- 父SWF与子SWF之间的传值
- Android系统权限和root权限
- Dozer使用总结
- 嘿嘿好事来临
- 设计模式-策略模式 Strategy Pattern
- pycurl post json data to php
- 旅行者问题
- mongodb管理
- 同余问题怎么求解最小正整数解
- 博客搬家
- Java笔记(7)