一、Orika 介绍
Orika是一个简单、快速的JavaBean拷贝框架,它能够递归地将数据从一个JavaBean复制到另一个JavaBean。
其实,类似的技术也有(比如Dozer),但是orika 速度更快。关于这方面我们就不深究了。
二、demo
本人用的是gradle构建项目,导入orika依赖:
compile('ma.glasnost.orika:orika-core:1.5.1')
使用idea插件lombox,快速构建get、set方法:
compile('org.projectlombok:lombok:1.16.16')
注意:demo中的UserA和UserB中的属性名要注意改变,本人犯懒了,只写了一个。
@Data
public class UserA implements Serializable {
private String name;
private Integer age;
}
@Data
public class UserB {
private String name;
private Integer age;
}
public class OrikaTest {
public static void main(String[] args) {
MapperFactory mapperFactory = new DefaultMapperFactory.Builder().build();
mapperFactory.classMap(UserA.class, UserB.class)
.field("name","name")
.field("age","age")
.byDefault()
.register();
UserA userA = new UserA();
userA.setName("壮壮");
userA.setAge(20);
MapperFacade mapper = mapperFactory.getMapperFacade();
UserB userB = mapper.map(userA,UserB.class);
System.out.println(userB.toString());
System.out.println("********************************************************************************");
//对象复制 属性名相同
//1.获取mapperFactory对象
MapperFactory mapperFactory = new DefaultMapperFactory.Builder().build();
UserA userA = new UserA();
userA.setName("壮壮");
userA.setAge(20);
//复制对象(属性名相同)方法1
UserB userB1 = mapperFactory.getMapperFacade(UserA.class,UserB.class).map(userA);
System.out.println(userB1);
//复制对象(属性名相同)方法2
UserB userB2 = mapperFactory.getMapperFacade().map(userA,UserB.class);
System.out.println(userB2);
System.out.println("********************************************************************************");
//对象复制 属性名不同
//1.获取mapperFactory
MapperFactory mapperFactory = new DefaultMapperFactory.Builder().build();
UserA userA = new UserA();
userA.setName("壮壮");
userA.setAge1(11);
//复制对象 (属性名不同)方法
//首先使用calssMap将两个类的字节码存好,使用field将双方名字对应,若有多个不同可连续使用field,使用byDefault将其余相同名字的自动拷贝(如果不使用则只会拷贝被filed配置的属性)
//最后使用register使其生效
mapperFactory.classMap(UserA.class,UserB.class).field("age1","age2").byDefault().register();
UserB userB = mapperFactory.getMapperFacade().map(userA,UserB.class);
System.out.println(userB);
System.out.println("********************************************************************************");
//复制集合
//1.获取mapperFactory对象
MapperFactory mapperFactory = new DefaultMapperFactory.Builder().build();
//创建集合
List<UserA> userAList = new ArrayList<>();
//向集合中添加
//TODO orika demo
userAList.add(new UserA("老大",1));
userAList.add(new UserA("老二",1));
userAList.add(new UserA("老三",1));
//进行集合复制(不同属性名)
//进行属性名匹配
mapperFactory.classMap(UserA.class,UserB.class).field("age1","age2").byDefault().register();
//进行集合复制
List<UserB> userBList = mapperFactory.getMapperFacade().mapAsList(userAList,UserB.class);
//输出
System.out.println(userBList);
}
}