Java对象拷贝
常用org.springframework.beans.BeanUtils的copyProperties(Object source, Object target)
Apache的commons-beanutils-1.8.3.jar 也可以完成对象的拷贝
注意:Apache的方法和Spring的用法相反,左边为目标对象,右边为源对象.
1 使用Spring提供BeanUtils
0 导入pom.xml坐标
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.16</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>5.3.2</version>
</dependency>
1 准备对象
@Data
public class UserDO {
private String id;
private String userName;
private Integer age;
}
@Data
public class UserVO {
private String id;
private String userName;
private String age;
}
2 单元测试
@Test
public void commonCopy() {
UserDO userDO = new UserDO("001", "Van", 18);
UserVO userVO = new UserVO();
BeanUtils.copyProperties(userDO, userVO);
System.out.println(userVO);
}
/**
*UserVO(id=001, userName=Van, age=null)
* 类型不同,不能拷贝
*/
2使用Apache的BeanUtils
0 导入Pom.xml坐标
<dependency>
<groupId>commons-beanutils</groupId>
<artifactId>commons-beanutils</artifactId>
<version>1.8.3</version>
</dependency>
1 单元测试
@Test
public void commonCopy2() throws Exception {
UserDO userDO = new UserDO("001", "Van", 18);
UserVO userVO = new UserVO();
org.apache.commons.beanutils.BeanUtils.copyProperties(userVO,userDO);
System.out.println(userVO);
}
集合拷贝
常见在业务层,将DTO数据和POJO对象,拷贝数据.
1 遍历集合,使用BeanUtils拷贝每一个对象
@Test
public void listCopyCommon() {
List<UserDO> userDOList = new ArrayList();
userDOList.add(new UserDO("002", "Van", 18));
userDOList.add(new UserDO("003", "VanVan", 20));
List<UserVO> userVOList = new ArrayList();
userDOList.forEach(userDO -> {
UserVO userVO = new UserVO();
BeanUtils.copyProperties(userDO, userVO);
userVOList.add(userVO);
});
System.out.println(userVOList);
}
2 使用alibaba的fastjson
0 导入pom.xml坐标
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.72</version>
<scope>compile</scope>
</dependency>
1 单元测试
@Test
public void listCopyUp2() {
List userDOList = new ArrayList();
userDOList.add(new UserDO(1L, "Van", 18, 1));
userDOList.add(new UserDO(2L, "VanVan", 20, 2));
List userVOList = JSON.parseArray(JSON.toJSONString(userDOList), UserVO.class);
System.out.println(userVOList);
}
3 使用mapstruct包
1 添加pom.xml坐标
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId>
<version>1.3.1.Final</version>
</dependency>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>1.3.1.Final</version>
</dependency>
2 创建一个转换的接口
@Mapper
public interface UserConverter {
UserConverter INSTANCE = Mappers.getMapper(UserConverter.class);
List<UserVO> listVo2dto(List<UserDO> vos);
}
3 单元测试
@Test
public void listCopyUp3() {
List userDOList = new ArrayList();
userDOList.add(new UserDO("003", "Van", 18));
userDOList.add(new UserDO("004", "VanVan", 20));
List list = UserConverter.INSTANCE.listVo2dto(userDOList);
System.out.println(list);
}