JavaBean及其JavaList复制,为null值的属性不复制 util

拷贝对象工具类(对象赋值)copyProperties——为null不复制 开发在中经常需要将一个对象的若干个值赋值给另外一个对象相对应的字段,且字段名是一样的,如果一个一个取一个一个赋值 太麻烦,使用org.springframework.beans.BeanUtils的copyProperties方法,有个弊端就是会将null也复制过来 自己写个工具类,继承org.springframework.beans.BeanUtils 对该方法进行改造,如代码中注释部分 p... 阅读详情

1前言:没有前言
2废话不多说,直接上代码

package com.xm.hardwaremanagement.util.tkmybatis;

import java.beans.BeanInfo;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;

/**
 * javabean复制
 *
 * @author lys
 * @date: 3:00 下午 2020/4/22
 * @version: 1.0.0
 */
public class BeanUtils {
    public BeanUtils() {
    }

    /**
     *copy对象
     * @param from  被copy的对象
     * @param toClass  被粘贴的类对象
     * @param <T>
     * @return copy好的对象
     * @throws RuntimeException
     */
    public static <T> T copyProperties(Object from, Class<T> toClass) throws RuntimeException {
        if (from == null) {
            return null;
        } else {
            try {
                T to = toClass.newInstance();
                copyProperties(from, to);
                return to;
            } catch (IllegalAccessException | InstantiationException var4) {
                throw new RuntimeException(var4);
            }
        }
    }

    /**
     * copy集合
     * @param fromList
     * @param toClass
     * @param <T>
     * @return
     * @throws RuntimeException
     */
    public static <T> List<T> copyListProperties(Collection<? extends Object> fromList, Class<T> toClass) throws RuntimeException {
        if (fromList == null) {
            return null;
        } else {
            List<T> result = new ArrayList(fromList.size());
            Iterator var3 = fromList.iterator();

            while (var3.hasNext()) {
                Object from = var3.next();
                T to = copyProperties(from, toClass);
                result.add(to);
            }

            return result;
        }
    }

    /**
     * @author lys
     * @date: 3:01 下午 2020/4/22
     * @return: java.beans.PropertyDescriptor
     * @version: 1.0.0
     * 获取类属性
     */
    private static PropertyDescriptor getPropertyDescriptor(PropertyDescriptor[] pds, PropertyDescriptor ref, boolean isStrict) {
        if (ref.getDisplayName().equals("class")) {
            return null;
        } else {
            PropertyDescriptor[] var3 = pds;
            int var4 = pds.length;

            for (int var5 = 0; var5 < var4; ++var5) {
                PropertyDescriptor pd = var3[var5];
                if (isStrict) {
                    if (pd.equals(ref)) {
                        return pd;
                    }
                } else if (ref.getPropertyType().equals(pd.getPropertyType()) && pd.getName().equals(ref.getName())) {
                    return pd;
                }
            }

            return null;
        }
    }

    /**
     * 合并两个javaBean属性值
     *
     * @author lys
     * @date: 3:01 下午 2020/4/22
     * @return: void
     * @version: 1.0.0
     */
    public static void copyProperties(Object fromObj, Object toObj) throws RuntimeException {
        copyProperties(fromObj, toObj, true);
    }


    /**
     * 对象属性copy
     * @param fromObj 被copy的对象
     * @param toObj  被粘贴的对象
     * @param ignoreNull  true表示不copy为null的属性,false表示都copy
     * @throws RuntimeException
     */
    public static void copyProperties(Object fromObj, Object toObj, boolean ignoreNull) throws RuntimeException {
        if (fromObj != null && toObj != null) {
            Class<? extends Object> fromClass = fromObj.getClass();
            Class<? extends Object> toClass = toObj.getClass();
            boolean isStrict = fromClass == toClass;

            try {
                BeanInfo fromBean = Introspector.getBeanInfo(fromClass);
                BeanInfo toBean = Introspector.getBeanInfo(toClass);
                PropertyDescriptor[] toPds = toBean.getPropertyDescriptors();
                PropertyDescriptor[] fromPds = fromBean.getPropertyDescriptors();
                PropertyDescriptor[] var10 = toPds;
                int var11 = toPds.length;

                for (int var12 = 0; var12 < var11; ++var12) {
                    PropertyDescriptor toPd = var10[var12];
                    PropertyDescriptor fromPd = getPropertyDescriptor(fromPds, toPd, isStrict);
                    if (fromPd != null && fromPd.getDisplayName().equals(toPd.getDisplayName())) {
                        Method readMethod = fromPd.getReadMethod();
                        Method writeMethod = writeMethod(toClass, toPd);
                        if (writeMethod != null && readMethod != null) {
                            Object param = readMethod.invoke(fromObj, (Object[]) null);
                            if (!ignoreNull || param != null) {
                                writeMethod.invoke(toObj, param);
                            }
                        }
                    }
                }

            } catch (Exception var18) {
                throw new RuntimeException(var18);
            }
        }
    }


    public static Method writeMethod(Class<?> clz, PropertyDescriptor property) {
        String firstByte = property.getDisplayName().substring(0, 1).toUpperCase();
        String setMethodStr = "set" + firstByte + property.getDisplayName().substring(1);
        Method method = null;

        try {
            method = clz.getMethod(setMethodStr, property.getPropertyType());
        } catch (NoSuchMethodException var6) {
        }

        return method;
    }
}

  • 完结
【运行报错】使用BeanUtil做beanToMap时,转换字段(可能为null)的属性为String类型 1. 报错信息: 使用Redis代替session做缓存时,需要将redis中未命中的数据,从数据库查出再存入redis缓存 首先得将对象转为hashmap(这里使用得是hutool的BeanUtil) 且使用StringRedisTemplateredis需要转换成的map的各个字段都是String类型!而bean的各个字段类型各不相同 如何在不遍历map(繁琐)的情况下,在转换为map时就直接将字段类型也转换为String?Map<String, Object> map = BeanUti 阅读详情

相关推荐

抖音直播参数逆向实战:手把手教你用Python获取ttwid和x-bogus(附完整代码)

本文深入解析抖音直播接口的反爬机制,重点剖析核心防护参数ttwid和x-bogus的生成原理与作用。通过Python实战,手把手教你逆向获取ttwid、webid等关键参数,并构建稳定的数据采集方案,为开发者提供企业级数据获取能力。

weixin_29196891的博客 1043

复制时源数据中null值不复制到

例如有个对象要新增,后面的新增,我们希望判断一下是否有这个数据,如果有,则对上次提交的完善。那么用其他方式实现很麻烦,本身的BeanUtils.copyProperties也是不大支持。使用:BeanUtil.copyProperties(source, target, Boolean)

wfdfg的博客 1112

SMIC Memory配置与Library Compiler实战:从lib到db的高效转换

本文详细介绍了SMIC Memory Compiler的配置要点与使用Library Compiler将.lib文件高效转换为.db文件的完整流程。文章深入解析了关键配置参数对性能和面积的影响,并提供了从交互式操作到自动化脚本的实战指南,帮助数字芯片设计工程师顺利完成存储器模型的生成与集成,确保Design Compiler能正确调用。

weixin_28314575的博客 335

Java复制一个对象并且不想复制其中的空值属性

Java复制一个对象并且不想复制其中的空值属性

weixin_40544268的博客 5708

Cube.js 安装避坑指南:从零到一键启动

本文是一份详细的Cube.js安装避坑指南,旨在帮助开发者从零开始顺利启动Cube.js。文章重点强调了安装前的环境准备,包括Node.js版本、包管理工具和项目路径等关键“地基”,并深入解析了使用npx安装的优势、数据库类型选择以及数据库连接配置的核心步骤与常见陷阱,确保您能高效完成安装并成功启动服务。

weixin_29218509的博客 429

关键词‖旋变传感器

旋转变压器(以下简称旋变)安装在永磁同步驱动电机的非传动端,其作用是检测转子的位置和速度。目前,通常采采用结构简单、坚固耐用、环境适应性好的磁阻式旋变作为位置传感器。

m0_72345077的博客 2147

34、对象拷贝(对象克隆)

34、对象拷贝 34.1 为什么要使用克隆? 想对一个对象进行处理,又想保留原有的数据进行接下来的操作,就需要克隆了,Java语言中克隆针对的是类的实例。 34.2 如何实现对象克隆? 有两种方式: 1). 实现Cloneable接口并重写Object类中的clone()方法; 2). 实现Serializable接口,通过对象的序列化和反序列化实现克隆,可以实现真正的深度克隆 注意:基于序列化和反序列化实现的克隆不仅仅是深度克隆,更重要的是通过泛型限定,可以检查出要克隆的对象是否支持序列化,这项检查是编译

qq_45912388的博客 500

AutoCAD 2024 LISP实用技巧:自定义快捷命令与高效绘图工具集

本文详细介绍了如何在AutoCAD 2024中部署和使用LISP脚本,打造高效绘图工具集。通过自定义快捷命令,如WFF(超级文字查找替换)、GQT(图层隔离)和LLTJ(智能长度统计),可大幅简化图层管理、文字编辑和测量统计等重复性操作,显著提升绘图效率。

gan8painter的博客 317

Java中把一个对象属性不为空的复制给另外一个对象

以上两种基于apache.commons。

qq_33763551的博客 2627

深入解析BLheli电调固件与Dshot通讯协议:从原理到实践

本文深入解析了无人机动力系统的核心——BLheli电调固件与Dshot通讯协议。详细阐述了BLheli固件从经典版到BLheli_32的演进及其功能特性,并重点剖析了Dshot数字协议如何通过数据包和校验码实现更快、更准、更可靠的电机控制。文章还涵盖了双向Dshot遥测、实战配置与调参指南,帮助玩家充分释放无人机性能。

weixin_28273593的博客 434

我的python学习之路

Python 是一门功能强大且易于学习的编程语言,广泛应用于数据分析、人工智能、Web 开发、自动化等领域。以下是一个 Python 学习路径的总结,帮助你系统地掌握 Python 编程。

数据知道的博客 3万+

java复制原对象有值的属性到新对象同时不改变原对象的固有的值(元素相同)

前提 说明:一般在一些业务字段特别多的情况并且由多个相同属性时,为了避免冗余的get和set方法,降低代码长度和阅读代码的难度。才会出现属性复制、浅拷贝、深拷贝的一些工具类。 首先要明确一点 BeanUtils.copyProperties() 是简单的属性复制,不是拷贝。其主要目的是利用反射机制对JavaBean的属性进行处理。 问题 但是使用这种属性赋值有个缺点,大家见下图 我这里使用的是org.springframework.beans.BeanUtils 一个很明显的问题:studen

kunzedang_9528的博客 8238

Python爬虫实战:逆向解析天猫商品详情API,精准捕获规格、SKU与促销活动

及浏览器开发者工具),绕过前端渲染的复杂性,直接逆向分析并调用其内部数据接口,从而高效、稳定地抓取商品的关键信息,包括商品规格、多维度SKU信息以及复杂的促销活动。print(f"SKU ID: {sku.sku_id}, 价格: ¥{sku.price}, 库存: {sku.stock}, 规格: {sku.props}")当你访问一个商品链接时,浏览器首先会加载一个几乎为空的HTML骨架,然后通过执行大量的JavaScript代码,向后台服务器发起多个异步请求,最终将获取到的数据填充到页面中。

2201_76125261的博客 1129

简单的使用BeanUtil.copyProperties不复制null值的字段

简单的使用BeanUtil.copyProperties不复制null值的字段

qq_43060570的博客 3744

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

使用 Builder 模式时 BeanUtils.copyProperties 的问题及解决方案

当您的项目中使用了Builder模式来创建对象时,应当特别注意属性复制的问题。无论是选择手动设置属性、利用toBuilder方法还是自定义属性复制方法,关键都在于确保源对象的属性能够准确无误地映射到目标Builder实例上,从而保证最终构建出的对象具有正确的状态。这样做不仅可以避免不必要的错误,还能提高代码的可读性和可维护性。

2301_76541209的博客 752

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

关于BeanUtils拷贝null属性的问题

BeanUtils在copy null属性时会有一些问题。现在总结一下现象、原因和解决方法。 问题现象 1.当源对象(a)中存在一个java.sql.Date类型的属性并且值为null,目标对象(b)中也存在这个同名同类型的属性。把a对象属性值copy给b时BeanUtils.copyProperties(b, a);会抛出异常; 2.当源对象(a)中存在一个java.sql.Date类型的...

郭大神的博客 9536

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

BeanUtil拷贝对象非null属性的方法

方法一:扩展BeanUtils import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanWrapper; import org.springframework.beans.BeanWrapperImpl; import org.springframework.beans.BeansException; import org.springframework.context.ApplicationConte

haohaoxuexiyai的博客 1850

BeanUtils.copyProperties 如果Integer 或Long 为null 默认赋值0

  BeanUtils.copyProperties(A,B); 如果B中的Integer类型的数据是null的,那么通过这个方法复制给A后,这个null的Integer数据会变成0。 也就是它有自己的规则,如果发现Integer类型的数据如果是null的,它会自作多情的给个默认值! 这个自作多情是很让开发人员反感的!比如Integer类型的数据=null是一个逻辑业务,但是经过复制后之前...

无忌 1202

java的BeanUtils.copyProperties会把为数据源对象中数字包装对象为null的值改成0赋值给操作对象的属性

如果使用java自带BeanUtils.copyProperties,它会把为数据源对象的数字包装对象为null的值改成0赋值给操作对象的属性!!!

MicroAndSmall的博客 1921

解决BeanUtils.copyProperties复制null属性的问题

使用 BeanUtils.copyProperties时候,a对象里null会覆盖b对象中已存在的值,此工具类解决了这个问题; package com.cws.users.copyUtil; import org.springframework.beans.BeanWrapper; import org.springframework.beans.BeanWrapperImpl; ...

qq_38474916的博客 4593

beanCopy,将非空的字段复制到另一个javabean

由于hibernate更新数据时,不想把null的字段给更新到数据库所有这样 有两个方法: target:数据库查的,source前端传的,会去除所有前端传的为null的字段 beanCopy(T source, T target) beanCopyWithIngore(T source, T target, String… ignoreProperties) public class BeanC...

weixin_40974880的博客 1117

获取实体中是null值的属性

// 场景之一:使用BeanUtils.copyProperties(Object source, Object target, String ignoreProperties)方法覆盖source实体参数时,如果某些参数不想覆盖 public static String[] getNullPropertyNames(Object source) { final BeanWrapper src = new BeanWrapperImpl(source); PropertyDescriptor[] pds

weixin_43265926的博客 433

复制属性的BeanUtil(为null时跳过)

public class MyBeanUtils { public static void copyProperties(Object source,Object target) throws Exception { if (source==null){ throw new Exception("Source can bot be null"); ...

码农的在线笔记 1819

Java对象属性复制的几种方法

对比Java中几种对象复制方法的区别和速度

Crazy_young_man的博客 3328

Java 对象拷贝

对象的创建可能需要消耗较大的时间和资源,如果需要创建多个相似的对象,使用克隆可以避免多次创建相同的对象,提高代码的执行效率和性能。

weixin_70624562的博客 1056
上一篇: 多线程之基本概念
下一篇: IDM下载神器全新详解教程:如何安装以及不限速下载某网盘资源
jothan_lee
博客等级 码龄9年 30粉丝 58原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值