标签:style blog http io ar color os 使用 sp
Dozer是一款javaBean的映射工具,用于解决一个类到另外一个类的自动适配功能,它即支持简单的映射,也支持复杂类型的双向递归映射(官网)。
举个例子,假设说我们现在有User(用户)、UserDetail(用户详细)两个实体类,但对外公布时,我们发布了UserDto、UserSimpleDto两个传输对象,现在我们来实现他们之间的相互转化:
用户:记录登录名、密码
1 /**
2 * @author X
3 */
4 public class User {
5
6 private String loginName; //登录名
7 private String password; //登录密码
8 private UserDetail userDetail; //用户详细
9
10 public String getLoginName() {
11 return loginName;
12 }
13
14 public void setLoginName(String loginName) {
15 this.loginName = loginName;
16 }
17
18 public String getPassword() {
19 return password;
20 }
21
22 public void setPassword(String password) {
23 this.password = password;
24 }
25
26 public UserDetail getUserDetail() {
27 return userDetail;
28 }
29
30 public void setUserDetail(UserDetail userDetail) {
31 this.userDetail = userDetail;
32 }
33 }
用户详情:记录用户的手机
1 /**
2 * @author X
3 */
4 public class UserDetail {
5
6 private String phoneNumber; //手机号
7
8 public String getPhoneNumber() {
9 return phoneNumber;
10 }
11
12 public void setPhoneNumber(String phoneNumber) {
13 this.phoneNumber = phoneNumber;
14 }
15 }
用户传输对象:记录了用户的登录名、用户的手机
1 /**
2 * @author X
3 */
4 public class UserDto {
5
6 private String userName; //用户名
7 private String userPhone; //用户手机
8
9 public String getUserName() {
10 return userName;
11 }
12
13 public void setUserName(String userName) {
14 this.userName = userName;
15 }
16
17 public String getUserPhone() {
18 return userPhone;
19 }
20
21 public void setUserPhone(String userPhone) {
22 this.userPhone = userPhone;
23 }
24 }
用户简单传输对象:记录了用户的登录名
1 /**
2 * @author X
3 */
4 public class UserSimpleDto {
5 private String loginName; //登录名
6
7 public String getLoginName() {
8 return loginName;
9 }
10
11 public void setLoginName(String loginName) {
12 this.loginName = loginName;
13 }
14 }
这个很简单,因为值相同,无需多余的配置,代码如下:
import org.dozer.DozerBeanMapper;
import org.dozer.Mapper;
/**
* @author X
*/
public class Run {
public static void main(String[] args) {
//给目标对象赋值
User user = new User();
user.setLoginName("shaguar");
user.setPassword("123456");
//转换
Mapper mapper = new DozerBeanMapper();
UserSimpleDto dto = mapper.map(user, UserSimpleDto.class);
System.out.println(dto.getLoginName());
}
}
运行结果:
这个相对来说就复杂一些,因为UserDto中不仅包含了User的name,也涉及到了UserDetail中的PhoneNumber,那就需要我们手动配置来解决Map的问题。
第一种:添加多个配置文件
映射配置
1 <?xml version="1.0" encoding="UTF-8"?>
2 <mappings xmlns="http://dozer.sourceforge.net" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3 xsi:schemaLocation="http://dozer.sourceforge.net
4 http://dozer.sourceforge.net/schema/beanmapping.xsd">
5 <mapping>
6 <class-a>User</class-a>
7 <class-b>UserDto</class-b>
8 <field>
9 <a>UserDetail.phoneNumber</a>
10 <b>userPhone</b>
11 </field>
12 <field>
13 <a>loginName</a>
14 <b>userName</b>
15 </field>
16 </mapping>
17 </mappings>
调用方式(只需要在映射之前先设置好配置文件即可。)
1 import org.dozer.DozerBeanMapper;
2 import org.dozer.Mapper;
3
4 import java.util.ArrayList;
5 import java.util.List;
6
7 /**
8 * @author X
9 */
10 public class Run {
11 public static void main(String[] args) {
12 //给目标对象赋值
13 User user = new User();
14 user.setLoginName("shaguar");
15 user.setPassword("123456");
16 UserDetail userDetail = new UserDetail();
17 userDetail.setPhoneNumber("1881234567890");
18 user.setUserDetail(userDetail);
19
20 List mappingFile = new ArrayList();
21 mappingFile.add("UserToUserDtoConfig.xml");
22 DozerBeanMapper mapper = new DozerBeanMapper();
23 mapper.setMappingFiles(mappingFile);
24 UserDto dto = mapper.map(user, UserDto.class);
25 System.out.println(dto.getUserName());
26 System.out.println(dto.getUserPhone());
27
28 }
29 }
第二种:添加默认配置文件(多个Mapping)
当然,你如果不想每次都load一个配置文件,也可以按照dozer的约定,写入命名为dozerBeanMapping.xml的配置中,并将其放入根目录下,这样使用如下方式去创建dozer的Mapper即可:
1 import org.dozer.DozerBeanMapper;
2 import org.dozer.DozerBeanMapperSingletonWrapper;
3 import org.dozer.Mapper;
4
5 import java.util.ArrayList;
6 import java.util.List;
7
8 /**
9 * @author X
10 */
11 public class Run {
12 public static void main(String[] args) {
13 //给目标对象赋值
14 User user = new User();
15 user.setLoginName("shaguar");
16 user.setPassword("123456");
17 UserDetail userDetail = new UserDetail();
18 userDetail.setPhoneNumber("1881234567890");
19 user.setUserDetail(userDetail);
20
21 Mapper mapper= DozerBeanMapperSingletonWrapper.getInstance();
22 UserDto dto = mapper.map(user, UserDto.class);
23 System.out.println(dto.getUserName());
24 System.out.println(dto.getUserPhone());
25 }
26 }
两种方式均可以得到如下结果:
且容我研究一番(未完待续……)
标签:style blog http io ar color os 使用 sp
原文地址:http://www.cnblogs.com/krockey/p/4123780.html