Orika是一个简单、快速的JavaBean拷贝框架,它能够递归地将数据从一个JavaBean复制到另一个JavaBean。
在pom.xml引入
<dependency>
<groupId>ma.glasnost.orika</groupId>
<artifactId>orika-core</artifactId>
<version>1.5.2</version>
</dependency>
1、拷贝属性相同的javabean类
创建Student类
public class Student {
private int id;
private String name;
private int age;
public Student(int id, String name, int age) {
this.id = id;
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Student{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
'}';
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
创建Teacher类
public class Teacher {
private int id;
private String name;
private int age;
@Override
public String toString() {
return "Teacher{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
'}';
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
写个测试类
public static void main(String[] args) {
Student stu=new Student(21,"Tom",1);
System.out.println(stucopytotea(stu));//属性都相同时
}
public static Teacher stucopytotea(Student stu) {
MapperFactory mapperFactory = new DefaultMapperFactory.Builder().build();
MapperFacade mapperFacade = mapperFactory.getMapperFacade();
Teacher teacher = mapperFacade.map(stu,Teacher.class);
return teacher;
}
输出 Teacher{id=21, name='Tom', age=1}
2、拷贝属性不相同的javabean类
创建一个Student类 (跟上面相同)
创建一个TeacherA类
public class TeacherA {
private int id;
private String teaname;
private int teaage;
@Override
public String toString() {
return "TeacherA{" +
"id=" + id +
", teaname='" + teaname + '\'' +
", teaage=" + teaage +
'}';
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getTeaname() {
return teaname;
}
public void setTeaname(String teaname) {
this.teaname = teaname;
}
public int getTeaage() {
return teaage;
}
public void setTeaage(int teaage) {
this.teaage = teaage;
}
}
写个测试类
public class StudyOrikaOne {
public static void main(String[] args) {
Student stu=new Student(21,"Tom",1);
System.out.println(stucopytoteaA(stu));//属性有不同时
}
public static TeacherA stucopytoteaA(Student stu) {
MapperFactory mapperFactory=new DefaultMapperFactory.Builder().build();
//使用field将双方名字对应,若有多个不同可连续使用field,使用byDefault将其余相同名字的自动拷贝
mapperFactory.classMap(Student.class,TeacherA.class)
.field("name","teaname")
.field("age","teaage")
.byDefault()
.register();
MapperFacade mapperFacade=mapperFactory.getMapperFacade();
TeacherA teacherA=mapperFacade.map(stu,TeacherA.class);
return teacherA;
}
}
输出TeacherA{id=21, teaname='Tom', teaage=1}
3、拷贝集合
使用 mapperFacade.mapAsList
public class StudyOrikaList {
public static void main(String[] args) {
List<Student> list=new ArrayList<Student>();
list.add(new Student(1,"Jack",20));
list.add(new Student(2,"Tom",21));
System.out.println(stucopytea(list));//拷贝list(对象属性都相同时)
System.out.println(stucopyteaA(list));//拷贝list(对象属性有不同时)
}
private static List<Teacher> stucopytea(List<Student> list) {
MapperFactory mapperFactory=new DefaultMapperFactory.Builder().build();
MapperFacade mapperFacade=mapperFactory.getMapperFacade();
List<Teacher> tealist=mapperFacade.mapAsList(list,Teacher.class);
return tealist;
}
private static List<TeacherA> stucopyteaA(List<Student> list) {
MapperFactory mapperFactory=new DefaultMapperFactory.Builder().build();
mapperFactory.classMap(Student.class,TeacherA.class)
.field("name","teaname")
.field("age","teaage")
.byDefault()
.register();
MapperFacade mapperFacade=mapperFactory.getMapperFacade();
List<TeacherA> listteaA=mapperFacade.mapAsList(list,TeacherA.class);
return listteaA;
}
}
输出[Teacher{id=1, name='Jack', age=20}, Teacher{id=2, name='Tom', age=21}]
[TeacherA{id=1, teaname='Jack', teaage=20}, TeacherA{id=2, teaname='Tom', teaage=21}]
4、对象中包含类 但是类里面的属性不同
创建一个Customer类
public class Customer {
private Student student;
@Override
public String toString() {
return "Customer{" +
"student=" + student +
'}';
}
public Student getStudent() {
return student;
}
public void setStudent(Student student) {
this.student = student;
}
}
创建一个CustomerA类
public class CustomerA {
private TeacherA teacherA;
@Override
public String toString() {
return "CustomerA{" +
"teacherA=" + teacherA +
'}';
}
public TeacherA getTeacherA() {
return teacherA;
}
public void setTeacherA(TeacherA teacherA) {
this.teacherA = teacherA;
}
}
写个测试类
public class StudyOrikaHasClass {
public static void main(String[] args) {
Customer customer=new Customer();
customer.setStudent(new Student(1,"TOM",22));
System.out.println(copyjihe(customer));
}
private static CustomerA copyjihe(Customer customer) {
MapperFactory mapperFactory=new DefaultMapperFactory.Builder().build();
mapperFactory.classMap(Customer.class,CustomerA.class)
.field("student.id","teacherA.id")
.field("student.age","teacherA.teaage")
.field("student.name","teacherA.teaname")
.byDefault()
.register();
MapperFacade mapperFacade=mapperFactory.getMapperFacade();
CustomerA customerA=mapperFacade.map(customer,CustomerA.class);
return customerA;
}
}
输出 CustomerA{teacherA=TeacherA{id=0, teaname='TOM', teaage=22}}
5、对象中包含集合,但集合中的对象类中属性不同
创建一个Cuslist类
public class Cuslist {
List<Student> list;
@Override
public String toString() {
return "Cuslist{" +
"list=" + list +
'}';
}
public List<Student> getList() {
return list;
}
public void setList(List<Student> list) {
this.list = list;
}
}
一个CuslistA类
public class CuslistA {
List<TeacherA> list;
@Override
public String toString() {
return "CuslistA{" +
"list=" + list +
'}';
}
public List<TeacherA> getList() {
return list;
}
public void setList(List<TeacherA> list) {
this.list = list;
}
}
测试类
public class StudyOrikaHasjihe {
public static void main(String[] args) {
List<Student> list=new ArrayList<Student>();
list.add(new Student(1,"TOM",22));
list.add(new Student(2,"Jack",23));
Cuslist cuslist=new Cuslist();
cuslist.setList(list);
System.out.println(copyjihe(cuslist));
}
private static CuslistA copyjihe(Cuslist cuslist) {
MapperFactory mapperFactory=new DefaultMapperFactory.Builder().build();
mapperFactory.classMap(Student.class,TeacherA.class)
.field("age","teaage")
.field("name","teaname")
.byDefault()
.register();
MapperFacade mapperFacade=mapperFactory.getMapperFacade();
CuslistA cuslistA=mapperFacade.map(cuslist,CuslistA.class);
return cuslistA;
}
}
输出CuslistA{list=[TeacherA{id=1, teaname='TOM', teaage=22}, TeacherA{id=2, teaname='Jack', teaage=23}]}