一、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);
}
}