大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE稳定放心使用
问题场景
例如有个对象要提交,提交一次,第二次提交我们希望是对上次提交的完善。。那么用其他方式实现很麻烦,本身的BeanUtils.copyProperties也是不大支持。
2020-12-19更新 新增了更好用的BeanMerge方法
,可以直接完整的copy对象属性,把两个属性合成到一个上面,详情请参考 《比BeanCopy好用的BeanMerge(java合并对象属性,把非空属性合成到目标对象上)》
解决方案
hutool开源库为我们提供了更为强大的Bean工具-BeanUtil,
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>4.1.14</version>
</dependency>
以上问题,只需要一句代码就搞定!!!
BeanUtil.copyProperties(oldDetail.get(),userDetail,true, CopyOptions.create().setIgnoreNullValue(true).setIgnoreError(true));
核心代码是CopyOptions.create().setIgnoreNullValue(true).setIgnoreError(true)
详情可以参考官方文档 http://hutool.mydoc.io/#text_319433 。
更详细的业务场景如下:
public Object save(UserDetail userDetail){
if(userDetail.getUserId()==0){
return ApiReturnUtil.error("userId不能为空");
}else{
//复制一个新的用于保存
UserDetail newDetail=new UserDetail();
BeanUtil.copyProperties(userDetail,newDetail);
Optional<UserDetail> oldDetail=userDetailRepository.findById(userDetail.getUserId());
if (oldDetail.isPresent()){
System.out.println("copying");
//复制旧的属性过来,忽略null属性,忽略null值,有值的以新的为主,null的则以旧为主
BeanUtil.copyProperties(oldDetail.get(),userDetail,true, CopyOptions.create().setIgnoreNullValue(true).setIgnoreError(true));
}
//复制新的所有非null来覆盖旧的
BeanUtil.copyProperties(userDetail,newDetail,true, CopyOptions.create().setIgnoreNullValue(true).setIgnoreError(true));
userDetailRepository.save(newDetail);
return ApiReturnUtil.success("保存成功",newDetail);
}
}
CopyOptions配置项:
CopyOptions参数提供一些BeanUtils.copyProperties注入属性的选项。
使用方法如下:
BeanUtil.copyProperties(oldObject,newObject,true, CopyOptions.create().setXXXX(true))
;
- editable 限制的类或接口,必须为目标对象的实现接口或父类,用于限制拷贝的属性,例如一个类我只想复制其父类的一些属性,就可以将editable设置为父类。
- ignoreNullValue 是否忽略空值,当源对象的值为null时,true: 忽略而不注入此值,false: 注入null
- ignoreProperties 忽略的属性列表,设置一个属性列表,不拷贝这些属性值
- ignoreError 是否忽略字段注入错误
可以通过CopyOptions.create()方法创建一个默认的配置项,通过setXXX方法设置每个配置项。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/186199.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...