1. 在pom.xml中添加orika core依赖:
<!-- https://mvnrepository.com/artifact/ma.glasnost.orika/orika-core --> <dependency> <groupId>ma.glasnost.orika</groupId> <artifactId>orika-core</artifactId> <version>1.4.1</version> </dependency>
2.1. 指定属性名
User1和User2是两个实体,部分属性一致:
User1.java 如下:
public class User1 { private String name; private Integer age; public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } @Override public String toString() { return "User1{" + "name='" + name + '\'' + ", age=" + age + '}'; } }
User2.java如下:
public class User2 { private String name2; private Integer age; private String agent; public String getName2() { return name2; } public void setName2(String name2) { this.name2 = name2; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public String getAgent() { return agent; } public void setAgent(String agent) { this.agent = agent; } @Override public String toString() { return "User2{" + "name2='" + name2 + '\'' + ", age=" + age + ", agent='" + agent + '\'' + '}'; } }
使用orika core可以将User1的内容复制到User2,对于属性名不一致的,可以手动设置对应的field,属性名一致的则可以忽略不显式说明:
import ma.glasnost.orika.MapperFacade; import ma.glasnost.orika.MapperFactory; import ma.glasnost.orika.impl.DefaultMapperFactory; public class Demo03 { public static void main(String[] args) { MapperFactory mapperFactory = new DefaultMapperFactory.Builder().build(); mapperFactory.classMap(User1.class, User2.class) .field("name", "name2") .byDefault() .register(); User1 user1 = new User1(); user1.setName("user1"); user1.setAge(1); MapperFacade mapperFacade = mapperFactory.getMapperFacade(); User2 user2 = mapperFacade.map(user1, User2.class); System.out.printf("user2: " + user2.toString()); } }
输出结果:
user2: User2{name='user1', age=1, agent='null'}
2.2. 可以编写通用的工具类,对同样的属性名进行拷贝:
import ma.glasnost.orika.MapperFacade; import ma.glasnost.orika.MapperFactory; import ma.glasnost.orika.impl.DefaultMapperFactory; import java.util.List; public class OrikaBeanMapper { private static final MapperFacade mapperFacade; static { MapperFactory mapperFactory = new DefaultMapperFactory.Builder().useAutoMapping(true).mapNulls(true).build(); mapperFacade = mapperFactory.getMapperFacade(); } public static <S, D> void map(S from, D to) { mapperFacade.map(from, to); } public static <S, D> D map(S from, Class<D> clazz) { return mapperFacade.map(from, clazz); } public static MapperFacade getMapperFacade() { return mapperFacade; } public static <S, D> List<D> mapAsList(Iterable<S> source, Class<D> destinationClass) { return mapperFacade.mapAsList(source, destinationClass); } }
通用工具类的使用:
public class Demo04 { public static void main(String[] args) { User1 user1 = new User1(); user1.setAge(1); user1.setName("user1"); User2 user2 = OrikaBeanMapper.map(user1, User2.class); System.out.println(user2.toString()); } }
输出结果:
User2{name2='null', age=1, agent='null'}