当前位置: 首页 > wzjs >正文

织梦网站tag自定义插件网站开发是程序员吗

织梦网站tag自定义插件,网站开发是程序员吗,页面模板设计,wordpress筑爱网一、需求背景 在日常Java开发中,我么通常会使用 BeanUtils 的 copyProperties() 方法来实现对象属性复制。然而在实际业务场景中,我们经常会遇到这样的需求: 当源对象属性值为NULL时,不希望覆盖目标对象原有的非NULL值。例如&am…

一、需求背景

在日常Java开发中,我么通常会使用 BeanUtilscopyProperties() 方法来实现对象属性复制。然而在实际业务场景中,我们经常会遇到这样的需求:

当源对象属性值为NULL时,不希望覆盖目标对象原有的非NULL值。例如:

// 用户更新信息场景
UserDTO userDTO = new UserDTO();
userDTO.setName("张三");
userDTO.setAge(null);  // 年龄字段为nullUser targetUser = userService.getUserById(1);
// 原始targetUser.age=25
BeanUtils.copyProperties(userDTO, targetUser); 
// 此时targetUser.age会被覆盖为null,不符合预期

二、CopyOptions核心配置解析

2.1 CopyOptions概述

在Hutool工具包的BeanUtil中,copyProperties()方法提供了更灵活的CopyOptions参数来控制拷贝行为:

public static void copyProperties(Object source, Object target, CopyOptions copyOptions)
CopyOptions

采用建造者模式设计,主要包含以下配置项:

配置项类型默认值说明
ignoreNullValuebooleanfalse是否忽略NULL值
ignoreCasebooleanfalse是否忽略字段名称大小写
ignoreErrorbooleanfalse是否忽略拷贝错误
editableClass<?>null限制目标对象类型
ignorePropertiesString[]null要忽略的属性名数组
overridebooleantrue是否覆盖已有值
fieldMappingMap<String, String>null字段名称映射关系

2.2 忽略NULL值的配置方法

要实现忽略NULL值的拷贝,需要创建CopyOptions并设置 ignoreNullValue 为true:

import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.bean.CopyOptions;// 创建配置
CopyOptions copyOptions = CopyOptions.create().setIgnoreNullValue(true);  // 关键配置// 执行拷贝
BeanUtil.copyProperties(source, target, copyOptions);

三、深度配置示例

3.1 复合配置示例

// 复杂场景配置示例
CopyOptions options = CopyOptions.create().setIgnoreNullValue(true)    // 忽略null值.setIgnoreCase(true)         // 忽略字段大小写.setIgnoreProperties("password") // 忽略密码字段.setOverride(false)          // 不覆盖已有值.setFieldMapping(Collections.singletonMap("userName", "name")); // 字段映射BeanUtil.copyProperties(dto, entity, options);

3.2 与Spring框架的对比

Spring的BeanUtils.copyProperties()默认不支持忽略NULL值,需要自行扩展:

// Spring场景下的NULL值忽略实现
public class CustomBeanUtils extends BeanUtils {public static void copyPropertiesIgnoreNull(Object src, Object target) {PropertyDescriptor[] srcPds = getPropertyDescriptors(src.getClass());for (PropertyDescriptor srcPd : srcPds) {if (srcPd.getReadMethod() != null) {try {Object value = srcPd.getReadMethod().invoke(src);if (value != null) {  // 只拷贝非NULL值PropertyDescriptor targetPd = getPropertyDescriptor(target.getClass(), srcPd.getName());if (targetPd != null && targetPd.getWriteMethod() != null) {targetPd.getWriteMethod().invoke(target, value);}}} catch (Exception ex) {throw new RuntimeException(ex);}}}}
}

四、特殊场景处理

4.1 嵌套对象拷贝

对于嵌套对象的NULL值处理,需要递归配置:

public static void deepCopyIgnoreNull(Object source, Object target) {CopyOptions options = CopyOptions.create().setIgnoreNullValue(true);BeanUtil.copyProperties(source, target, options);// 获取所有嵌套对象字段Field[] fields = source.getClass().getDeclaredFields();for (Field field : fields) {if (field.getType().getName().startsWith("com.yourpackage")) {try {field.setAccessible(true);Object srcChild = field.get(source);Object targetChild = field.get(target);if (srcChild != null && targetChild != null) {deepCopyIgnoreNull(srcChild, targetChild);}} catch (IllegalAccessException e) {// 异常处理}}}
}

4.2 集合属性拷贝

// 集合属性拷贝示例
CopyOptions options = CopyOptions.create().setIgnoreNullValue(true);List<SourceDTO> sourceList = ...;
List<TargetVO> targetList = new ArrayList<>();for (SourceDTO source : sourceList) {TargetVO target = new TargetVO();BeanUtil.copyProperties(source, target, options);targetList.add(target);
}

通过合理配置CopyOptions,可以极大提升对象属性拷贝的灵活性和安全性,满足各种业务场景的需求。


文章转载自:

http://GpB5TYfz.cfrhc.cn
http://Irdj35RB.cfrhc.cn
http://ovdwrdVj.cfrhc.cn
http://ewAvYbSL.cfrhc.cn
http://bozbH50o.cfrhc.cn
http://Ono1baXM.cfrhc.cn
http://hVCuLAqi.cfrhc.cn
http://XEZSsU9A.cfrhc.cn
http://Qrnxu1tN.cfrhc.cn
http://PxTZRUBM.cfrhc.cn
http://MsOReO0g.cfrhc.cn
http://ZnjtzuY5.cfrhc.cn
http://DI2Sp50B.cfrhc.cn
http://CGIXRS7b.cfrhc.cn
http://AQjRBqse.cfrhc.cn
http://o8pRCxxv.cfrhc.cn
http://n4ErzfaW.cfrhc.cn
http://VUYyd1IM.cfrhc.cn
http://U8YvPPcJ.cfrhc.cn
http://o8BAXYUw.cfrhc.cn
http://ejYggAuF.cfrhc.cn
http://h06tUJn6.cfrhc.cn
http://o22optto.cfrhc.cn
http://2yei24qU.cfrhc.cn
http://fgfE2Vuy.cfrhc.cn
http://x8gN6L1t.cfrhc.cn
http://1rnmptJg.cfrhc.cn
http://pZHCy1eT.cfrhc.cn
http://pmhU1KxD.cfrhc.cn
http://OPgaqjDA.cfrhc.cn
http://www.dtcms.com/wzjs/694126.html

相关文章:

  • 生产企业网站如何做seo第一活动线报网
  • 网站网站制作费用忻州企业网站建设
  • 网站如何设置关键词建宇建设工程交易中心网站
  • 网站域名备案多长时间东莞企业网站推广技巧
  • 网站的总体架构服装线上结合线下的推广方案
  • 自适应网站做多大尺寸的软件开发工具免费下载
  • 外贸网站建设 广州长沙哪里可以做网站
  • 福田网站建设公司乐云seo免费观看电视在线高清
  • 为网站设计手机版自助免费建站系统
  • 网站开发费属于什么费用南京网
  • 广告设计网站免费wordpress归档侧边栏按分类
  • 大良网站建设公司wordpress模块化
  • 学做美食饮品网站百度一下下载安装
  • 300元做网站微信公众平台官方网站登录
  • 影评网站建设少儿编程哪家好
  • 城市网站建设意义佛山市住房和城乡建设部网站
  • 网站建设与管理试卷答案温州seo优化
  • 网站免费做软件有哪些全国企业信用信息查询
  • 湖北网站建设建设网站视频
  • wordpress c博客网站自动seo
  • 网站建设与维护是什么内容网站栏目策划
  • 携程旅游网站官网北海市网站建设
  • 建站宝盒后台企业加盟网站建设
  • 邢台做网站优化费用企业为什么网站建设
  • 建材公司网站建设方案wordpress部署php
  • 姜堰网站建设最近在线观看免费播放电视剧
  • 绵阳银行网站建设wordpress百度百家模板
  • 个人门户网站模板怎样做网站备案
  • 网站建设申请总结济南建设网站制作优化分析
  • 新加坡网站制作农业生态园电商网站建设