在我们编码的过程中少不了的是javaBean的映射,如果字段较少的话还好,一旦字段较多就比较麻烦了,这时Dozer就派上用场了!!
1.1 什么是dozer?
Dozer 是一个对象转换工具。
Dozer可以在JavaBean到JavaBean之间进行递归数据复制,并且这些JavaBean可以是不同的复杂的类型。
所有的mapping,Dozer将会很直接的将名称相同的fields进行复制,如果field名不同,或者有特别的对应要求,则可以在xml中进行定义。
1.2 为什么要使用Dozer?
分析多层架构的J2EE系统,经常存在JavaBean直接的拷贝。
比如我们在DAO层,通过Do取得业务层需要的数据,将这些数据传递给Service层的VO。
Do与VO就存在典型的值拷贝。
典型的解决方案就是手动拷贝,代码中充斥大量Set 和Get方法,真正的业务被埋藏值与值的拷贝之中。
另一种方案就是使用BeanUtil,但BeanUtil不够很好的灵活性,又时候还不得不手动拷贝。
Dozer可以灵活的对对象进行转换,且使用简单。
1.3 如何得到Dozer工具类jar包
2.如果使用maven工具的话,在pom.Xml文件中加入:
net.sf.dozer
dozer
5.2.1
加入你的构建路径既可以使用。
示例:
//这是工具类
packagedozer;importjava.util.ArrayList;importjava.util.List;importorg.dozer.DozerBeanMapper;importorg.dozer.Mapper;/***
* @Title: DozerUtil.java
* @Package
* @Description: 将一个对象的属性复制到另一个对象或者list中
*@authorlicy
* @date 2018年11月8日
*@versionV1.0*/
public classDozerUtil {private static Mapper mapper = newDozerBeanMapper();public static List transforList(List> sources, Classclazz) {
List list = new ArrayList<>();if (sources == null) {returnlist;
}for(Object o : sources) {
T t=transfor(o, clazz);
list.add(t);
}returnlist;
}public static voidtransfor(Object source, Object target) {if (source == null || target == null) {return;
}
mapper.map(source, target);
}public static T transfor(Object source, Classtarget) {if (source == null) {return null;
}returnmapper.map(source, target);
}
}
测试实体类:
packagedozer;/*** @Title: DozerBean.java
* @Package dozer
* @Description: TODO(用一句话描述该文件做什么)
*@authorlicy
* @date 2018年11月9日
*@versionV1.0*/
public classDozerBean {private intid;privateString name;private intage;public intgetId() {returnid;
}public void setId(intid) {this.id =id;
}publicString getName() {returnname;
}public voidsetName(String name) {this.name =name;
}public intgetAge() {returnage;
}public void setAge(intage) {this.age =age;
}publicDozerBean() {super();//TODO Auto-generated constructor stub
}
@OverridepublicString toString() {return "DozerBean [id=" + id + ", name=" + name + ", age=" + age + "]";
}public DozerBean(int id, String name, intage) {super();this.id =id;this.name =name;this.age =age;
}
}
测试代码:
packagedozer;public classTestDozerUtil {public static voidmain(String[] args) {
DozerBean dBean1= new DozerBean(1,"a",1);
DozerBean dBean2= DozerUtil.transfor(dBean1, DozerBean.class);
System.out.println(dBean2.toString());
}
}
这里只是简单一个小例子,快速熟悉Dozer的使用,详细了解请看:http://dozer.sourceforge.net/