在我們編碼的過程中少不了的是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包
1.點擊下載:http://sourceforge.net/projects/dozer/files/
2.如果使用maven工具的話,在pom.Xml文件中加入:
<dependency>
<groupId>net.sf.dozer</groupId>
<artifactId>dozer</artifactId>
<version>5.2.1</version>
</dependency>
加入你的構建路徑既可以使用。
示例:
//這是工具類
package dozer; import java.util.ArrayList; import java.util.List; import org.dozer.DozerBeanMapper; import org.dozer.Mapper; /** * * @Title: DozerUtil.java * @Package * @Description: 將一個對象的屬性復制到另一個對象或者list中 * @author licy * @date 2018年11月8日 * @version V1.0 */ public class DozerUtil { private static Mapper mapper = new DozerBeanMapper(); public static <T> List<T> transforList(List<?> sources, Class<T> clazz) { List<T> list = new ArrayList<>(); if (sources == null) { return list; } for (Object o : sources) { T t = transfor(o, clazz); list.add(t); } return list; } public static void transfor(Object source, Object target) { if (source == null || target == null) { return; } mapper.map(source, target); } public static <T> T transfor(Object source, Class<T> target) { if (source == null) { return null; } return mapper.map(source, target); } }
測試實體類:
package dozer; /** * @Title: DozerBean.java * @Package dozer * @Description: TODO(用一句話描述該文件做什么) * @author licy * @date 2018年11月9日 * @version V1.0 */ public class DozerBean { private int id; private String name; private int age; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public DozerBean() { super(); // TODO Auto-generated constructor stub } @Override public String toString() { return "DozerBean [id=" + id + ", name=" + name + ", age=" + age + "]"; } public DozerBean(int id, String name, int age) { super(); this.id = id; this.name = name; this.age = age; }
}
測試代碼:
package dozer; public class TestDozerUtil { public static void main(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/