一、依赖
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId>
<version>1.3.1.Final</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
二、代码
package com.citydo.bigdata.copyutils;
import lombok.Data;
@Data
public class Employee {
private int id;
private String name;
private String position;
private boolean married;
}
package com.citydo.bigdata.copyutils;
import lombok.Data;
@Data
public class User {
private int id;
private String name;
private boolean married;
}
package com.citydo.bigdata.copyutils;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
@Mapper
public interface UserMapper {
UserMapper INSTANCE = Mappers.getMapper(UserMapper.class);
Employee userToEmployee(User user);
User employeeToUser(Employee employee);
}
package com.citydo.bigdata.copyutils;
public class UserMapperImpl implements UserMapper {
@Override
public Employee userToEmployee(User user) {
if (user == null) {
return null;
}
Employee employee = new Employee();
employee.setId(user.getId());
employee.setName(user.getName());
employee.setMarried(user.isMarried());
return employee;
}
@Override
public User employeeToUser(Employee employee) {
if (employee == null) {
return null;
}
User user = new User();
user.setId(employee.getId());
user.setName(employee.getName());
user.setMarried(employee.isMarried());
return user;
}
}
package com.citydo.bigdata.copyutils;
/**
* org.apache.commons.beanutils.BeanUtils.copyProperties
* org.apache.commons.beanutils.PropertyUtils.copyProperties
* org.springframework.beans.BeanUtils.copyProperties
* org.springframework.cglib.beans.BeanCopier.copy
* org.mapstruct
*/
public class Copy {
/**
* apache.PropertyUtils
* value = this.getSimpleProperty(orig, name);
* if (dest instanceof DynaBean) {
* ((DynaBean)dest).set(name, value);
* } else {
* // 核心逻辑
* this.setSimpleProperty(dest, name, value);
* }
*/
/**
* apache.BeanUtils
* while(var13.hasNext()) {
* Entry<String, Object> entry = (Entry)var13.next();
* String name = (String)entry.getKey();
* if (this.getPropertyUtils().isWriteable(dest, name)) {
* // 核心逻辑
* this.copyProperty(dest, name, entry.getValue());
* }
* }
*/
public static void main(String[] args) {
User user = new User();
user.setId(125);
user.setName("Chao");
user.setMarried(false);
Employee e = UserMapper.INSTANCE.userToEmployee(user);
System.out.println(e);
}
}