zoukankan      html  css  js  c++  java
  • Orika 对象复制 克隆

    引入依赖

    <dependency>
      <groupId>ma.glasnost.orika</groupId>
      <artifactId>orika-core</artifactId>
      <version>1.5.4</version>
    </dependency>

    构造一个MapperFactory

    MapperFactory mapperFactory = new DefaultMapperFactory.Builder().build();  

    注册字段映射

    mapperFactory.classMap(SourceClass.class, TargetClass.class)  
       .field("firstName", "givenName")
       .field("lastName", "sirName")
       .byDefault()
       .register();

    当字段名在两个实体不一致时可以通过 .field()方法进行映射,如果字段名都一样则可省略,byDefault()方法用于注册名称相同的属性,如果不希望某个字段参与映射,可以使用 exclude方法。

    进行映射

    MapperFacade mapper = mapperFactory.getMapperFacade();
    
    SourceClass source = new SourceClass();  
    // set some field values
    ...
    // map the fields of 'source' onto a new instance of PersonDest
    TargetClass target = mapper.map(source, TargetClass.class);  

    示例:

    实体映射

    // 实体转换
    Student student = new Student("1", "name1", "email1");
    
    // 构造一个MapperFactory
    MapperFactory mapperFactory = new DefaultMapperFactory.Builder().build();
    // 注册字段映射
    // 当字段名在两个实体不一致时可以通过 .field()方法进行映射,如果字段名都一样则可省略,byDefault()方法用于注册名称相同的属性,如果不希望某个字段参与映射,可以使用 exclude方法。
    mapperFactory.classMap(Student.class, Teacher.class)
            .field("email", "emailAddress")
            .byDefault()
            .register();
    // 进行映射
    MapperFacade mapper = mapperFactory.getMapperFacade();
    Teacher teacher = mapper.map(student, Teacher.class);
    log.info("teacher:" + teacher);//teacher:Teacher(id=1, name=name1, emailAddress=email1)

    集合转换

    // 集合转换
    Student student1 = new Student("1", "name1", "email1");
    Student student2 = new Student("2", "name2", "email2");
    List<Student> studentList = Lists.newArrayList(student1, student2);
    
    // 构造一个MapperFactory
    MapperFactory mapperFactory = new DefaultMapperFactory.Builder().build();
    // 注册字段映射
    // 当字段名在两个实体不一致时可以通过 .field()方法进行映射,如果字段名都一样则可省略,byDefault()方法用于注册名称相同的属性,如果不希望某个字段参与映射,可以使用 exclude方法。
    mapperFactory.classMap(Student.class, Teacher.class)
            .field("email", "emailAddress")
            .byDefault()
            .register();
    // 进行映射
    MapperFacade mapper = mapperFactory.getMapperFacade();
    List<Teacher> teacherList = mapper.mapAsList(studentList, Teacher.class);
    log.info("teacherList:" + teacherList);// teacherList:[Teacher(id=1, name=name1, emailAddress=email1), Teacher(id=2, name=name2, emailAddress=email2)]

    集合映射实体

    // 集合映射实体
    Person person = new Person();
    person.setNameParts(Lists.newArrayList("1", "name1", "email1"));
    
    // 构造一个MapperFactory
    MapperFactory mapperFactory = new DefaultMapperFactory.Builder().build();
    // 注册字段映射
    // 当字段名在两个实体不一致时可以通过 .field()方法进行映射,如果字段名都一样则可省略,byDefault()方法用于注册名称相同的属性,如果不希望某个字段参与映射,可以使用 exclude方法。
    mapperFactory.classMap(Person.class, Student.class)
            .field("nameParts[0]", "id")
            .field("nameParts[1]", "name")
            .field("nameParts[2]", "email")
            .byDefault()
            .register();
    // 进行映射
    MapperFacade mapper = mapperFactory.getMapperFacade();
    Student student = mapper.map(person, Student.class);
    log.info("student:" + student);// student:Student(id=1, name=name1, email=email1)

    类类型映射

    // 类类型映射
    BasicPerson basicPerson = new BasicPerson();
    Student student = new Student("1", "name1", "email1");
    basicPerson.setStudent(student);
    
    // 构造一个MapperFactory
    MapperFactory mapperFactory = new DefaultMapperFactory.Builder().build();
    // 注册字段映射
    // 当字段名在两个实体不一致时可以通过 .field()方法进行映射,如果字段名都一样则可省略,byDefault()方法用于注册名称相同的属性,如果不希望某个字段参与映射,可以使用 exclude方法。
    mapperFactory.classMap(BasicPerson.class, Teacher.class)
            .field("student.id", "id")
            .field("student.name", "name")
            .field("student.email", "emailAddress")
            .byDefault()
            .register();
    // 进行映射
    MapperFacade mapper = mapperFactory.getMapperFacade();
    Teacher teacher = mapper.map(basicPerson, Teacher.class);
    log.info("teacher:" + teacher);// teacher:Teacher(id=1, name=name1, emailAddress=email1)

    多重映射

    // 多重映射
    Student student1 = new Student("1", "name1", "email1");
    Student student2 = new Student("2", "name2", "email2");
    List<Student> studentList = Lists.newArrayList(student1, student2);
    
    StudentGrade studentGrade = new StudentGrade();
    studentGrade.setStudentGradeName("gradename1");
    studentGrade.setStudentList(studentList);
    
    // 构造一个MapperFactory
    MapperFactory mapperFactory = new DefaultMapperFactory.Builder().build();
    // 注册字段映射
    // 当字段名在两个实体不一致时可以通过 .field()方法进行映射,如果字段名都一样则可省略,byDefault()方法用于注册名称相同的属性,如果不希望某个字段参与映射,可以使用 exclude方法。
    mapperFactory.classMap(StudentGrade.class, TeacherGrade.class)
            .field("studentGradeName", "teacherGradeName")
            .field("studentList", "teacherList")
            .byDefault()
            .register();
    mapperFactory.classMap(Student.class, Teacher.class)
            .field("email", "emailAddress")
            .byDefault()
            .register();
    // 进行映射
    MapperFacade mapper = mapperFactory.getMapperFacade();
    TeacherGrade teacherGrade = mapper.map(studentGrade, TeacherGrade.class);
    log.info("teacherGrade:" + teacherGrade);// teacherGrade:TeacherGrade(teacherGradeName=gradename1, teacherList=[Teacher(id=1, name=name1, emailAddress=email1), Teacher(id=2, name=name2, emailAddress=email2)])

    附:

    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    public class Student {
        private String id;
        private String name;
        private String email;
    }
    
    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    public class Teacher {
        private String id;
        private String name;
        private String emailAddress;
    }
    
    @Data
    public class Person {
        private List<String> nameParts;
    }
    
    @Data
    public class BasicPerson {
        private Student student;
    }
    
    @Data
    public class StudentGrade {
        private String studentGradeName;
        private List<Student> studentList;
    }
    
    @Data
    public class TeacherGrade {
        private String teacherGradeName;
        private List<Teacher> teacherList;
    }

    参考文章:http://javadaily.cn/articles/2021/09/15/1631687008282.html

  • 相关阅读:
    从量子加密到机器学习,盘点2015阿里云开放的黑科技
    架构设计:系统存储(24)——数据一致性与Paxos算法(中)
    深入理解Git (一) - 元数据
    IOS Using UIAlertView to show alerts
    gdal hdfs接口数据读取
    /usr/lib64/python2.6/site-packages/pycurl.so: undefined symbol: CRYPTO_set_locking_callback
    linux jexus mono 发布.net webservices web页面
    docker中使用systemd
    基于Open vSwitch搭建虚拟路由器
    Openstack Neutron DVR workflow
  • 原文地址:https://www.cnblogs.com/ooo0/p/15305352.html
Copyright © 2011-2022 走看看