【Java】【50】BeanUtils.copyProperties();只从源对象中拷贝自己为null的值

前言:

关联博客:

【Java】【3】BeanUtils.copyProperties();将一个实体类的值复制到另外一个实体类 - 花生喂龙 - 博客园
https://www.cnblogs.com/huashengweilong/p/10690509.html

关联博客里的是最简单的两个实体类赋值的情况,将oldEntity的值,赋给newEntity。而项目中有时的要求是,newEntity里的对应字段有值,就用newEntity里的;没有值,才将oldEntity的值赋给newEntity。

正文:

用法:

BeanUtil.copyProperties(oldObject, newObject, true, CopyOptions.create().setXXXX(true))

参数:

editable:限制的类或接口,必须为目标对象的实现接口或父类,用于限制拷贝的属性,例如一个类我只想复制其父类的一些属性,就可以将editable设置为父类。
ignoreNullValue:是否忽略空值,当源对象的值为null时,true: 忽略而不注入此值,false: 注入null
ignoreProperties:忽略的属性列表,设置一个属性列表,不拷贝这些属性值
ignoreError:是否忽略字段注入错误
可以通过CopyOptions.create()方法创建一个默认的配置项,通过setXXX方法设置每个配置项

当前需求的写法:

BeanUtil.copyProperties(oldDetail.get(), userDetail, true, CopyOptions.create().setIgnoreNullValue(true).setIgnoreError(true));

pom.xml

//这是别人写的jar包,他的文档:http://hutool.mydoc.io/#text_319433
<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>4.1.14</version>
</dependency>

代码

public Entity test(Entity inputEntity){
    Entity newEntity = new Entity();
    Entity oldEntity = this.dao...; //从数据库获取
    if (oldDetail.isPresent()) {
        BeanUtil.copyProperties(oldEntity.get(), inputEntity, true, CopyOptions.create().setIgnoreNullValue(true).setIgnoreError(true));
    }
    BeanUtil.copyProperties(inputEntity, newEntity);
    return newEntity;
}

参考博客:

BeanUtils.copyProperties忽略null值/只拷贝非null属性 - ★【World Of Moshow 郑锴】★ - CSDN博客
https://blog.csdn.net/moshowgame/article/details/82826535

原文地址:https://www.cnblogs.com/huashengweilong/p/11379372.html

时间: 2024-08-29 13:42:50

【Java】【50】BeanUtils.copyProperties();只从源对象中拷贝自己为null的值的相关文章

java提高篇(六)-----使用序列化实现对象的拷贝

我们知道在Java中存在这个接口Cloneable,实现该接口的类都会具备被拷贝的能力,同时拷贝是在内存中进行,在性能方面比我们直接通过new生成对象来的快,特别是在大对象的生成上,使得性能的提升非常明显.然而我们知道拷贝分为深拷贝和浅拷贝之分,但是浅拷贝存在对象属性拷贝不彻底问题.关于深拷贝.浅拷贝的请参考这里:渐析java的浅拷贝和深拷贝 一.浅拷贝问题 我们先看如下代码: public class Person implements Cloneable{ /** 姓名 **/ privat

你还在用BeanUtils进行对象属性拷贝?

一.背景 1.1 对象拷贝概念 Java中,数据类型分为值类型(基本数据类型)和引用类型,值类型包括int.double.byte.boolean.char等简单数据类型,引用类型包括类.接口.数组等复杂类型. 对象拷贝分为浅拷贝(浅克隆)与深拷贝(深克隆). 浅拷贝与深拷贝差异 1.2 示例前准备 源对象属性类UserDO.class(以下示例,源对象都用这个) @Datapublic class UserDO { private int id; private String userName

BeanUtils.copyProperties VS PropertyUtils.copyProperties

作为两个bean属性copy的工具类,他们被广泛使用,同时也很容易误用,给人造成困然:比如:昨天发现同事在使用BeanUtils.copyProperties copy有integer类型属性的bean时, 没有考虑到会将null转换为0,而后面的业务依赖于null来判断,导致业务出错.下面总结一下主要的注意点: 大范围两个工具类都是对两个bean之前存在name相同的属性进行处理,无论是源bean或者目标bean多出的属性均不处理. 具体到BeanUtils是相同name并且类型之间支持转换的

BeanUtils.copyProperties(A,B)使用注意事项

1原文地址;https://blog.csdn.net/qq_33623197/article/details/79731809 2***最近项目中用到BeanUtils.copyProperties(),然后踩了一些坑,也在网上查看了很多同行的测试和总结,现在将自己的测试.整理的注意事项分享如下,希望大家一起学习进步. ***注意:本篇还有很多没有研究到的地方,如果各位需要使用BeanUtils的功能,还需要根据自身情况多加测试,验证.任何第三方的工具未经调研.测试和验证,都是有风险的,你我共

BeanUtils.copyProperties(A,B)字段复制

BeanUtils提供对Java反射和自省API的包装.其主要目的是利用反射机制对JavaBean的属性进行处理.我们知道,一个JavaBean通常包含了大量的属性,很多情况下,对JavaBean的处理导致大量get/set代码堆积,增加了代码长度和阅读代码的难度. 注意:属性复制,不同jar中的方法,用法不一样. 1.package org.springframework.beans;中的 BeanUtils.copyProperties(A,B); 是A中的值付给B FinCpDocDO f

[Java开发之路](9)对象序列化与反序列化

1. 对象序列化 当你创建对象时.仅仅要你须要.它会一直存在,可是程序终止时,不管何时它都不会继续存在.虽然这样做是很有意义的,可是在某些情况下.假设程序不执行时扔能存在而且保存其信息,那将对我们很实用.这样,在下次程序执行时,该对象将被重建而且拥有的信息与程序上次执行时它所拥有的信息同样. 当然,我们也能够通过将信息写入文件或者数据库,可是假设能将一个对象声明为是"持久性"的,并为我们处理掉全部的细节,这将会显得十分方便. Java的序列化是将那些实现了Serializable接口的

JDK1.8源码中的编程习惯

1.如果指定了toString()返回值的格式,则应该提供一个对应的静态工厂方法 1.1BigInteger.toString() /* * Returns the String representation of this BigInteger in the * given radix.* / public String toString(int radix) { /** * Returns the decimal String representation of this BigIntege

【Java】【Flume】Flume-NG源码阅读之AvroSink

org.apache.flume.sink.AvroSink是用来通过网络来传输数据的,可以将event发送到RPC服务器(比如AvroSource),使用AvroSink和AvroSource可以组成分层结构.它继承自AbstractRpcSink  extends AbstractSink implements Configurable这跟其他的sink一样都得extends AbstractSink implements Configurable,所以重点也在confgure.start.

BeanUtils.copyProperties方法,当属性Date为null解决

问题描述:org.apache.commons.beanutils user对象和formBean对象都有属性birthday,而且都是java.sql.Date类型的 当进行BeanUtils.copyProperties(user,formBean);复制属性时候,formBean中属性birthday为null,那么就会出现如下异常 解决方法 在BeanUtils.copyProperties(user,formBean);前加上一行代码: BeanUtilsBean.getInstanc