Dozer是一款javaBean的映射工具,用于解決一個(gè)類(lèi)到另外一個(gè)類(lèi)的自動(dòng)適配功能,它即支持簡(jiǎn)單的映射,也支持復(fù)雜類(lèi)型的雙向遞歸映射(官網(wǎng))。
示例舉個(gè)例子,假設(shè)說(shuō)我們現(xiàn)在有User(用戶(hù))、UserDetail(用戶(hù)詳細(xì))兩個(gè)實(shí)體類(lèi),但對(duì)外公布時(shí),我們發(fā)布了UserDto、UserSimpleDto兩個(gè)傳輸對(duì)象,現(xiàn)在我們來(lái)實(shí)現(xiàn)他們之間的相互轉(zhuǎn)化:
用戶(hù):記錄登錄名、密碼

1 /** 2 * @author X 3 */ 4 public class User { 5 6 PRivate String loginName; //登錄名 7 private String passWord; //登錄密碼 8 private UserDetail userDetail; //用戶(hù)詳細(xì) 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 }User.java用戶(hù)詳情:記錄用戶(hù)的手機(jī)

1 /** 2 * @author X 3 */ 4 public class UserDetail { 5 6 private String phoneNumber; //手機(jī)號(hào) 7 8 public String getPhoneNumber() { 9 return phoneNumber;10 }11 12 public void setPhoneNumber(String phoneNumber) {13 this.phoneNumber = phoneNumber;14 }15 }UserDetail.java用戶(hù)傳輸對(duì)象:記錄了用戶(hù)的登錄名、用戶(hù)的手機(jī)

1 /** 2 * @author X 3 */ 4 public class UserDto { 5 6 private String userName; //用戶(hù)名 7 private String userPhone; //用戶(hù)手機(jī) 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 }UserDto.java用戶(hù)簡(jiǎn)單傳輸對(duì)象:記錄了用戶(hù)的登錄名

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 }UserSimpleDto.javaUser->UserSimpleDto這個(gè)很簡(jiǎn)單,因?yàn)橹迪嗤瑹o(wú)需多余的配置,代碼如下:

import org.dozer.DozerBeanMapper;import org.dozer.Mapper;/** * @author X */public class Run { public static void main(String[] args) { //給目標(biāo)對(duì)象賦值 User user = new User(); user.setLoginName("shaguar"); user.setPassword("123456"); //轉(zhuǎn)換 Mapper mapper = new DozerBeanMapper(); UserSimpleDto dto = mapper.map(user, UserSimpleDto.class); System.out.println(dto.getLoginName()); }}Run.java運(yùn)行結(jié)果:

這個(gè)相對(duì)來(lái)說(shuō)就復(fù)雜一些,因?yàn)閁serDto中不僅包含了User的name,也涉及到了UserDetail中的PhoneNumber,那就需要我們手動(dòng)配置來(lái)解決Map的問(wèn)題。
第一種:添加多個(gè)配置文件
映射配置

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>UserToUserDetailConfig.xml
調(diào)用方式(只需要在映射之前先設(shè)置好配置文件即可。)

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 //給目標(biāo)對(duì)象賦值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 }Run.java第二種:添加默認(rèn)配置文件(多個(gè)Mapping)
當(dāng)然,你如果不想每次都load一個(gè)配置文件,也可以按照dozer的約定,寫(xiě)入命名為dozerBeanMapping.xml的配置中,并將其放入根目錄下,這樣使用如下方式去創(chuàng)建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 X10 */11 public class Run {12 public static void main(String[] args) {13 //給目標(biāo)對(duì)象賦值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 }Run.java兩種方式均可以得到如下結(jié)果:

新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注