Dozer官网:
http://dozer.sourceforge.net/documentation/gettingstarted.html
maven引入:
<!-- https://mvnrepository.com/artifact/net.sf.dozer/dozer -->
<dependency>
<groupId>net.sf.dozer</groupId>
<artifactId>dozer</artifactId>
<version>5.5.1</version>
</dependency>
还有就是5.4.0和以前的版本5.3.2
<!-- <dependency>
<groupId>net.sf.dozer</groupId>
<artifactId>dozer</artifactId>
<version>5.4.0</version>
</dependency> -->
Dozer-5.5.1和以前的版本使用上有一点差别:
1.和spring整合时引入的bean已经变了
5.5.1引入的bean是:org.dozer.DozerBeanMapper,(5.5.1已经删除了org.dozer.spring这个包了,好像5.4.0开始引入org.dozer.DozerBeanMapper她的)
老版本是:org.dozer.spring.DozerBeanMapperFactoryBean
第一步: 新建各种Bean和转换类
新建一个Info类:
package com.test.dozerspringtest.mode;
import java.util.Date;
public class Info {
private int id;
private Date createDate;
private GenderType gender;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public Date getCreateDate() {
return createDate;
}
public void setCreateDate(Date createDate) {
this.createDate = createDate;
}
public GenderType getGender() {
return gender;
}
public void setGender(GenderType gender) {
this.gender = gender;
}
@Override
public String toString() {
return "Info [id=" + id + ", createDate=" + createDate + ", gender=" + gender + "]";
}
}
建InfoVO类
package com.test.dozerspringtest.mode;
public class InfoVO {
private int id;
private String date;
private Integer gender;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
public Integer getGender() {
return gender;
}
public void setGender(Integer gender) {
this.gender = gender;
}
@Override
public String toString() {
return "InfoVO [id=" + id + ", date=" + date + ", gender=" + gender + "]";
}
}
新建User类:
package com.test.dozerspringtest.mode;
public class User {
private int id;
private String name;
private String password;
private Info info;
private String option;
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 String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Info getInfo() {
return info;
}
public void setInfo(Info info) {
this.info = info;
}
public String getOption() {
return option;
}
public void setOption(String option) {
this.option = option;
}
@Override
public String toString() {
return "User [id=" + id + ", name=" + name + ", password=" + password + ", info=" + info + ", option=" + option
+ "]";
}
}
再建UserVO类:
package com.test.dozerspringtest.mode;
public class UserVO {
private int id;
private String userName;
private String password;
private InfoVO info;
private Integer option;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public InfoVO getInfo() {
return info;
}
public void setInfo(InfoVO info) {
this.info = info;
}
public Integer getOption() {
return option;
}
public void setOption(Integer option) {
this.option = option;
}
@Override
public String toString() {
return "UserVO [id=" + id + ", userName=" + userName + ", password=" + password + ", info=" + info + ", option="
+ option + "]";
}
}
还建了个GenderType类:
package com.test.dozerspringtest.mode;
public enum GenderType {
male, //男
female //女
}
还需建2个转换类:
EnumConverter类:
package com.test.dozerspringtest.util;
import org.dozer.CustomConverter;
import com.test.dozerspringtest.mode.GenderType;
public class EnumConverter implements CustomConverter {
@Override
public Object convert(Object existingDestinationFieldValue, Object sourceFieldValue, Class<?> destinationClass, Class<?> sourceClass) {
Object returnVale = null;
if (sourceFieldValue != null) {
if (sourceFieldValue instanceof Integer) {
if ((Integer) sourceFieldValue == 0) {
returnVale = GenderType.male;
} else if ((Integer) sourceFieldValue == 1) {
returnVale = GenderType.female;
}
} else if (sourceFieldValue instanceof Enum) {
if (sourceFieldValue == GenderType.male) {
returnVale = 0;
} else if (sourceFieldValue == GenderType.female) {
returnVale = 1;
}
}
}
return returnVale;
}
}
SpecialConverter类:
package com.test.dozerspringtest.util;
import org.dozer.CustomConverter;
public class SpecialConverter implements CustomConverter{
@Override
public Object convert(Object existingDestinationFieldValue, Object sourceFieldValue, Class<?> destinationClass, Class<?> sourceClass) {
Object returnVale = null;
if (sourceFieldValue != null) {
if (sourceFieldValue instanceof Integer) {
if ((Integer) sourceFieldValue == 0) {
returnVale = "NO";
} else if ((Integer) sourceFieldValue == 1) {
returnVale = "OK";
}
} else if (sourceFieldValue instanceof String) {
if (sourceFieldValue.equals("NO")) {
returnVale = 0;
} else if (sourceFieldValue.equals("OK")) {
returnVale = 1;
}
}
}
return returnVale;
}
}
第二部:
接下来就是配置文件了
spring引入的配置dozer-spring.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.2.xsd">
<!-- dozer-5.5.1的配置 -->
<bean id="org.dozer.Mapper" class="org.dozer.DozerBeanMapper">
<property name="mappingFiles">
<list>
<value>dozer/dozer-beanmapping.xml</value>
</list>
<!-- <list>
<value>dozer-global-configuration.xml</value>
<value>dozer-bean-mappings.xml</value>
<value>more-dozer-bean-mappings.xml</value>
</list> -->
</property>
</bean>
<!-- dozer-5.4.0以前版本的配置 -->
<!-- <bean id="dozerMapper" class="org.dozer.spring.DozerBeanMapperFactoryBean">
<property name="mappingFiles">
<list>
<value>classpath:dozer/dozer-beanmapping.xml</value>
</list>
</property>
</bean> -->
</beans>
在resource资源目录下建一个dozer目录,在该文件夹下新建dozer-beanmapping.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.net
http://dozer.sourceforge.net/schema/beanmapping.xsd">
<configuration>
<stop-on-errors>true</stop-on-errors>
<date-format>yyyy-MM-dd</date-format>
<wildcard>true</wildcard>
<custom-converters>
<converter type="com.test.dozerspringtest.util.EnumConverter">
<class-a>java.lang.Enum</class-a>
<class-b>java.lang.Integer</class-b>
</converter>
</custom-converters>
</configuration>
<mapping date-format="yyyy-MM-dd">
<class-a>com.test.dozerspringtest.mode.User</class-a>
<class-b>com.test.dozerspringtest.mode.UserVO</class-b>
<field>
<a>name</a>
<b>userName</b>
</field>
<field>
<a>info.createDate</a>
<b>info.date</b>
</field>
<field custom-converter="com.test.dozerspringtest.util.EnumConverter">
<a>info.gender</a>
<b>info.gender</b>
</field>
<field custom-converter="com.test.dozerspringtest.util.SpecialConverter">
<a>option</a>
<b>option</b>
</field>
</mapping>
</mappings>
接着测试了
MainTest类:
package com.test.dozerspringtest.test;
import java.util.Date;
import org.dozer.Mapper;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.test.dozerspringtest.mode.GenderType;
import com.test.dozerspringtest.mode.Info;
import com.test.dozerspringtest.mode.User;
import com.test.dozerspringtest.mode.UserVO;
public class MainTest {
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext("spring-dozer.xml");
//Mapper mapper = (Mapper) ctx.getBean("dozerMapper");
Mapper mapper = (Mapper) ctx.getBean("org.dozer.Mapper");
Info info = new Info();
info.setCreateDate(new Date());
info.setGender(GenderType.female);
info.setId(100);
User user = new User();
user.setId(100);
user.setName("jasson");
user.setPassword("password");
user.setInfo(info);
user.setOption("NO");
UserVO uservo = mapper.map(user, UserVO.class);
System.out.println(user.getId()+"<------>"+uservo.getId());
System.out.println(user.getPassword()+"<------>"+uservo.getPassword());
System.out.println(user.getName()+"<------>"+uservo.getUserName());
System.out.println(user.getInfo().getId()+"<------>"+uservo.getInfo().getId());
System.out.println(user.getInfo().getGender()+"<------>"+uservo.getInfo().getGender());
System.out.println(user.getInfo().getCreateDate()+"<------>"+uservo.getInfo().getDate());
System.out.println(user.getOption()+"<------>"+uservo.getOption());
}
}