BeanUtil.copyProperties复制复杂对象List Map不生效
方案一:JSON复制
亲测可行,据说比for循环效率高
TARGET_BEAN= JSON.parseArray(JSON.toJSONString(SOURCE_BEAN), TARGET_BEAN.class);
方案二:for循环
略
注意:BeanUtil忽略空值复制方法
JSON复制方法 复制后会造成部分source没有的字段空值(即时之前有值),所以以下两种复制方式需要选择使用。
1.含source的空字段复制(覆盖,适合新增)
此方法复制后会造成部分source没有的字段空值。
eg1:项目中有用到@Version(mybatis plus)等注解,此方法复制后(version字段被空值)修改实体,注解不起作用。
//单实体
public static <T, E> T copyProperties(Class<T> clz, E from) {
String ob = JSONObject.toJSONString(from);
return JSONObject.parseObject(ob, clz);
}
//list
public static <T, E> List<T> copyProperties(Class<T> clz, List<E> from) {
List<T> list = new ArrayList<T>();
if (from == null) {
return null;
}
for (E model : from) {
T t = copyProperties(clz, model);
list.add(t);
}
return list;
}
//page
public static <T, E> Page<T> copyProperties(Class<T> clz, IPage<E> from) {
if (from == null) {
return null;
}
Page<T> page = new Page<T>(from.getCurrent(), from.getSize(), from.getTotal());
page.setRecords(copyProperties(clz, from.getRecords()));
page.setTotal(from.getTotal());
return page;
}
2.忽略source的空字段复制(适合修改)
此方法不可复制复杂对象(List Map)。
<dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>4.5.1</version> </dependency>
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.copier.CopyOptions;
BeanUtil.copyProperties(SOURCE_BEAN, TARGET_BEAN, CopyOptions.create().setIgnoreNullValue(true).setIgnoreError(true));
