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 copyProperties(Class clz, E from) {
   	String ob = JSONObject.toJSONString(from);
       return JSONObject.parseObject(ob, clz);
   }

   //list
   public static  List copyProperties(Class clz, List from) {
   	List list = new ArrayList();
   	if (from == null) {
   		return null;
   	}
   	for (E model : from) {
   		T t = copyProperties(clz, model);
   		list.add(t);
   	}

   	return list;
   }
   
   //page
   public static  Page copyProperties(Class clz, IPage from) {
   	if (from == null) {
   		return null;
   	}
   	Page page = new Page(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)); 

你可能感兴趣的:(点点滴滴,java后台)