导入jar
<dependency><groupId>ma.glasnost.orika</groupId><artifactId>orika-core</artifactId><version>1.5.2</version></dependency>
编写容器注入的类
package com.kingboy.springboot.config;import ma.glasnost.orika.MapperFactory;
import ma.glasnost.orika.impl.DefaultMapperFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class MapperFacotoryAutoWire {@Beanpublic MapperFactory getFactory(){return new DefaultMapperFactory.Builder().build();}}
单元测试例子
@SpringBootTest(classes = KingBoyApplication.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@RunWith(SpringRunner.class)
public class MapperFactoryTest {@Autowiredprivate MapperFactory mapperFactory;/** * 将一个已经存在的类的属性映射到另外一个类上(可以不存在),直接返回该类,注意必须要有默认构造方法,不然报错 */@Testpublic void copyBeanToBean(){Person person = new Person("king", 123, new Date());mapperFactory.classMap(Person.class, Student.class).field("dateTime","birth")//不一样的字段映射.byDefault()//剩余的字段映射.register();//如果所有字段一样,则不用写mapperFactory.classMap()方法;Student student = mapperFactory.getMapperFacade().map(person, Student.class);System.out.println(student);//Student{name='king', grade='null', age=123, birth=Thu Apr 13 19:04:43 CST 2017}}/** * 将一个List映射到另一个List */@Testpublic void copyListToList(){List<Person> personList = getPersonList();//手动配置不一样的属性转换mapperFactory.classMap(Person.class, Student.class).field("dateTime","birth")//不一样的字段映射.byDefault()//剩余的字段映射.register();//转换ListList<Student> students = mapperFactory.getMapperFacade().mapAsList(personList, Student.class);students.forEach(student -> {System.out.println(student);});/** * Student{name='lucy1', grade='null', age=1, birth=Thu Apr 13 19:10:39 CST 2017} *Student{name='lucy2', grade='null', age=2, birth=Thu Apr 13 19:10:39 CST 2017} *Student{name='lucy3', grade='null', age=3, birth=Thu Apr 13 19:10:39 CST 2017} *Student{name='lucy4', grade='null', age=4, birth=Thu Apr 13 19:10:39 CST 2017} *Student{name='lucy5', grade='null', age=5, birth=Thu Apr 13 19:10:39 CST 2017} */}public List<Person> getPersonList(){List<Person> list = new ArrayList<>(5);Person person1 = new Person("lucy1", 1, new Date());Person person2 = new Person("lucy2", 2, new Date());Person person3 = new Person("lucy3", 3, new Date());Person person4 = new Person("lucy4", 4, new Date());Person person5 = new Person("lucy5", 5, new Date());list.add(person1);list.add(person2);list.add(person3);list.add(person4);list.add(person5);return list;}
}
Person类
package com.kingboy.springboot.domain;import java.time.LocalDateTime;
import java.util.Date;public class Person {public Person() {}public Person(String name, Integer age, Date dateTime) {this.name = name;this.age = age;this.dateTime = dateTime;}private String name;private Integer age;private Date dateTime;public String getName() {return name;}public Person setName(String name) {this.name = name;return this;}public Integer getAge() {return age;}public Person setAge(Integer age) {this.age = age;return this;}public Date getDateTime() {return dateTime;}public Person setDateTime(Date dateTime) {this.dateTime = dateTime;return this;}@Overridepublic String toString() {return "Person{" +"name='" + name + '\'' +", age=" + age +", dateTime=" + dateTime +'}';}
}
Student类
package com.kingboy.springboot.domain;import java.time.LocalDateTime;
import java.util.Date;public class Student {private String name;private String grade;private Integer age;private Date birth;public Date getBirth() {return birth;}public Student setBirth(Date birth) {this.birth = birth;return this;}public String getName() {return name;}public Student setName(String name) {this.name = name;return this;}public String getGrade() {return grade;}public Student setGrade(String grade) {this.grade = grade;return this;}public Integer getAge() {return age;}public Student setAge(Integer age) {this.age = age;return this;}@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", grade='" + grade + '\'' +", age=" + age +", birth=" + birth +'}';}
}