Dozer 是一个对象转换工具。
Dozer可以在javaBean到JavaBean之间进行递归数据复制,并且这些JavaBean可以是不同的复杂的类型,
所有的mapping,Dozer将会很直接的将名称相同的fields进行复制,如果field名不同,或者有特别的对应要求,则可以在xml中进行定义
dozer是深层复制的,即使原实体中有其他对象的引用,只要目标数据中有对应的引用对象或者配置文件中指定了对应的mapper,目标数据也会获取这个引用对象
java工具类是:
public class DozerBeanCopy { PRivate static DozerBeanMapper dozer = new DozerBeanMapper(); public static void copy(Object source, Object destinationObject) { dozer.map(source, destinationObject); } public static void main(String[] args) { //map ->实体 对于map中和实体中属性名一样的字段会自动进行转化,不一样的字段转换不成功 Student student=new Student(); HashMap<Object, Object> map=new HashMap<Object,Object>(); map.put("id", "id"); map.put("name", "name"); map.put("age1", 11); copy(map, student); System.out.println(student.getName()); System.out.println(student.getAge()); //实体->dto dto->实体的相互转化,其中目标数据不一样的字段不会自动转化 Student student2=new Student("id", "name", 11); StudentDTO sDto=new StudentDTO(); copy(student2, sDto); System.out.println(sDto.getName()); //方式二:该方式用于数据类型不一致,或者名称不相同或者有级联关系等情况下的映射,该方式可以添加多个配置文件 Student student3=new Student("id", "name", 11); StudentVO svo=new StudentVO(); List myMappingFiles = new ArrayList(); myMappingFiles.add("dozerBeanMapping.xml"); DozerBeanMapper mapper = new DozerBeanMapper(); mapper.setMappingFiles(myMappingFiles); mapper.map(student3, svo); System.out.println(svo.getNameVo()); }}配置文件如下:<?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"><mapping date-format="yyyy-MM-dd"><class-a>com.test.DozerBeanCopy.Student</class-a><class-b>com.test.DozerBeanCopy.StudentVO</class-b><field><a>name</a><b>nameVo</b></field><field><a>age</a><b>ageVo</b></field></mapping></mappings>web:
1.在spring整合dozer的时候可以在spring的配置文件中加入以下代码:<bean id="mapper" class="org.dozer.spring.DozerBeanMapperFactoryBean"> <property name="mappingFiles"><list> <value>classpath*:dozer-config/dozerBeanMapping.xml</value> </list> </property> </bean>2.在basecontroller或者baseService下面注入这个bean
private Mappermapper ;public Mapper getMapper(){ return mapper;}public void setMapper(Mapper mapper){ this.mapper = mapper;}3.我们把dozker交给spring去管理后就可以使用以下方式直接复制对象getMapper().map(sourceObject,DestinationObject.class)使用过程中的错误:
1.xml解析错误---好吧,我新建的文件,第一行写成这样了
<?xmlversion="1.0"encoding="UTF-8"?>
so,你看出来了没?应该这样
<?xmlversion="1.0"encoding="UTF-8"?>
Caused by: org.xml.sax.SAXException: Parsing Fatal ErrorLine: 1URI: nullMessage: White space is required before the encoding pseudo attribute in the XML declaration. at org.dozer.loader.xml.XMLParserFactory$DozerDefaultHandler.fatalError(XMLParserFactory.java:113) at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(ErrorHandlerWrapper.java:177) at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:388)2.缺少slf4j-api.jar的依赖Caused by: java.lang.ClassNotFoundException: org.slf4j.LoggerFactory at java.net.URLClassLoader$1.run(URLClassLoader.java:202) at java.security.accessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:190)3.缺少commons-lang3.jar依赖Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/lang3/StringUtils at org.dozer.util.ResourceLoader.getResource(ResourceLoader.java:59) at org.dozer.util.DefaultClassLoader.loadResource(DefaultClassLoader.java:49) at org.dozer.config.GlobalSettings.loadGlobalSettings(GlobalSettings.java:116)4.缺少 commons-beans.jarCaused by: java.lang.ClassNotFoundException: org.apache.commons.beanutils.ConversionException at java.net.URLClassLoader$1.run(URLClassLoader.java:202) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:190)总之,需要引入的jar包有:
新闻热点
疑难解答