orika实现对象复制
1、新建maven工程orika-demo,引入orika依赖,其中pom.xml如下
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>orika.demo</groupId> <artifactId>orika-demo</artifactId> <version>1.0-SNAPSHOT</version> <dependencies> <dependency> <groupId>ma.glasnost.orika</groupId> <artifactId>orika-core</artifactId> <version>1.4.1</version> </dependency> </dependencies> </project>
2、测试场景一:类名不同,属性完全相同的复制
public class UserDTO { private String name; private String sex; public UserDTO(String name, String sex) { this.name = name; this.sex = sex; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } @Override public String toString() { return "UserDTO{" + "name='" + name + '\'' + ", sex='" + sex + '\'' + '}'; } }
public class UserDO { private String name; private String sex; public UserDO(String name, String sex) { this.name = name; this.sex = sex; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } @Override public String toString() { return "UserDO{" + "name='" + name + '\'' + ", sex='" + sex + '\'' + '}'; } }
public class Test { public static void main(String[] args){ MapperFactory mapperFactory = new DefaultMapperFactory.Builder().build(); UserDTO userDTO = new UserDTO("张三","男"); UserDO userDO = mapperFactory.getMapperFacade().map(userDTO,UserDO.class); System.out.println(userDO.toString()); } }
UserDO{name='张三', sex='男'}
3、测试场景二:类名不同,部分属性不同的复制
public class UserDTO { private String name; private String sex; public UserDTO(String name, String sex) { this.name = name; this.sex = sex; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } @Override public String toString() { return "UserDTO{" + "name='" + name + '\'' + ", sex='" + sex + '\'' + '}'; } }
public class NewUserDTO { private String name; private String newSex; public NewUserDTO(String name, String newSex) { this.name = name; this.newSex = newSex; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getNewSex() { return newSex; } public void setNewSex(String newSex) { this.newSex = newSex; } @Override public String toString() { return "NewUserDTO{" + "name='" + name + '\'' + ", newSex='" + newSex + '\'' + '}'; } }
public class Test { public static void main(String[] args){ MapperFactory mapperFactory = new DefaultMapperFactory.Builder().build(); UserDTO userDTO = new UserDTO("张三","男"); //如果不使用byDefault,则只会拷贝被field配置的属性,最后使用register使其生效 mapperFactory.classMap(UserDTO.class,NewUserDTO.class).field("sex", "newSex").byDefault().register(); NewUserDTO newUserDTO = mapperFactory.getMapperFacade().map(userDTO,NewUserDTO.class); System.out.println(newUserDTO.toString()); } }
NewUserDTO{name='张三', newSex='男'}
4、测试场景三:集合复制,集合内类的属性名相同
public class UserDTO { private String name; private String sex; public UserDTO(String name, String sex) { this.name = name; this.sex = sex; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } @Override public String toString() { return "UserDTO{" + "name='" + name + '\'' + ", sex='" + sex + '\'' + '}'; } }
public class UserDO { private String name; private String sex; public UserDO(String name, String sex) { this.name = name; this.sex = sex; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } @Override public String toString() { return "UserDO{" + "name='" + name + '\'' + ", sex='" + sex + '\'' + '}'; } }
public class Test { public static void main(String[] args){ MapperFactory mapperFactory = new DefaultMapperFactory.Builder().build(); List<UserDTO> userDTOList = new ArrayList<UserDTO>(); userDTOList.add(new UserDTO("张三","男")); userDTOList.add(new UserDTO("李英","女")); List<UserDO> userDOList = mapperFactory.getMapperFacade().mapAsList(userDTOList,UserDO.class); System.out.println(userDOList.toString()); } }
[UserDO{name='张三', sex='男'}, UserDO{name='李英', sex='女'}]
5、测试场景四:集合复制,集合内类的属性名部分不同
public class UserDTO { private String name; private String sex; public UserDTO(String name, String sex) { this.name = name; this.sex = sex; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } @Override public String toString() { return "UserDTO{" + "name='" + name + '\'' + ", sex='" + sex + '\'' + '}'; } }
public class NewUserDTO { private String name; private String newSex; public NewUserDTO(String name, String newSex) { this.name = name; this.newSex = newSex; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getNewSex() { return newSex; } public void setNewSex(String newSex) { this.newSex = newSex; } @Override public String toString() { return "NewUserDTO{" + "name='" + name + '\'' + ", newSex='" + newSex + '\'' + '}'; } }
public class Test { public static void main(String[] args){ MapperFactory mapperFactory = new DefaultMapperFactory.Builder().build(); List<UserDTO> userDTOList = new ArrayList<UserDTO>(); userDTOList.add(new UserDTO("张三","男")); userDTOList.add(new UserDTO("李英","女")); mapperFactory.classMap(UserDTO.class, NewUserDTO.class).field("sex","newSex").byDefault().register(); List<NewUserDTO> newUserDTOList = mapperFactory.getMapperFacade().mapAsList(userDTOList,NewUserDTO.class); System.out.println(newUserDTOList.toString()); } }
[NewUserDTO{name='张三', newSex='男'}, NewUserDTO{name='李英', newSex='女'}]
6、测试场景五:类复制,类里面包含集合属性,类的属性部分不同,集合属性名字相同,但是集合里面的类属性部分不同
public class UserListDTO { private String listName; private List<UserDTO> userList; public String getListName() { return listName; } public void setListName(String listName) { this.listName = listName; } public List<UserDTO> getUserList() { return userList; } public void setUserList(List<UserDTO> userList) { this.userList = userList; } @Override public String toString() { return "UserListDTO{" + "listName='" + listName + '\'' + ", userList=" + userList + '}'; } }
public class NewUserListDTO { private String newListName; private List<NewUserDTO> userList; public String getNewListName() { return newListName; } public void setNewListName(String newListName) { this.newListName = newListName; } public List<NewUserDTO> getUserList() { return userList; } public void setUserList(List<NewUserDTO> userList) { this.userList = userList; } @Override public String toString() { return "NewUserListDTO{" + "newListName='" + newListName + '\'' + ", userList=" + userList + '}'; } }
public class Test { public static void main(String[] args){ MapperFactory mapperFactory = new DefaultMapperFactory.Builder().build(); List<UserDTO> userDTOList = new ArrayList<UserDTO>(); userDTOList.add(new UserDTO("张三","男")); userDTOList.add(new UserDTO("李英","女")); UserListDTO userListDTO = new UserListDTO(); userListDTO.setListName("list001"); userListDTO.setUserList(userDTOList); mapperFactory.classMap(UserDTO.class, NewUserDTO.class).field("sex","newSex").byDefault().register(); mapperFactory.classMap(UserListDTO.class, NewUserListDTO.class).field("listName","newListName").byDefault().register(); NewUserListDTO newUserListDTO = mapperFactory.getMapperFacade().map(userListDTO,NewUserListDTO.class); System.out.println(newUserListDTO.toString()); } }
NewUserListDTO{newListName='list001', userList=[NewUserDTO{name='张三', newSex='男'}, NewUserDTO{name='李英', newSex='女'}]}
                    
                
                
            
        
浙公网安备 33010602011771号