波神

导航

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='女'}]}

 

posted on 2019-01-29 13:35  波神  阅读(734)  评论(0)    收藏  举报