BeanUtils.copyProperties的使用

使用背景:

当我们从前端表单传过来的数据(比如有两张表的数据都在这里面)到达后端,由json数据转换为对象后,需要把数据分别对应添加到数据库表1和表2的时候,一般我们用的方法就是

表一对象.setXXXX(源对象.getXXXXX())

如果有几十个需要赋值的的字段呢?那就很头疼了

解决方案:

org.springframework.beans.BeanUtils,它提供了对java反射和自省API的包装。

该工具方法可以帮我们大大简化这一步骤。

例如:

@Data
public class User {
    private String id;
    private String name;
    private String age;
    private String account;
    private String password;
}
@Data
public class Person {
    private String id;
    private String name;
    private String age;
    private String sex;
}
public class Test {
    public static void main(String[] args) {
        User user = new User();
        user.setId("1");
        user.setAge("2");
        user.setName("wzh");
        user.setAccount("wangzh");
        user.setPassword("1111");
        Person person = new Person();
        BeanUtils.copyProperties(user,person);
    }
}

结果

Person(id=1, name=wzh, age=2, sex=null)

 BeanUtils.copyProperties(源数据对象,新对象);

 


BeanUtils.copyProperties会进行类型转换;
BeanUtils.copyProperties方法简单来说就是将两个字段相同的对象进行属性值的复制。如果 两个对象之间存在名称不相同的属性,则 BeanUtils 不对这些属性进行处理,需要程序手动处理。
这两个类在不同的包下面,而这两个类的copyProperties()方法里面传递的参数赋值是相反的。
 

一、 org.springframework.beans.BeanUtils
a拷贝到b

a,b为对象
BeanUtils.copyProperties(a, b);


二、org.apache.commons.beanutils.BeanUtils
b拷贝到a

a,b为对象
BeanUtils.copyProperties(a, b);

BeanUtils.copyProperties(A, B); 方法将会把对象 A 的属性复制给对象 B。如果 B 中有的字段在 A 中也存在,那么该字段的值将被 A 的对应字段的值覆盖。换句话说,如果 A 和 B 有相同名称的属性,那么在复制过程中,B 中的属性值将会被 A 中对应属性的值所替换。

不过需要注意的是,如果 B 中有一些属性在 A 中没有对应的属性,那么这些属性的值不会被覆盖,而会保持原有的值。在执行属性复制时,只有那些在 A 和 B 中都存在的属性会被复制。

在使用 BeanUtils.copyProperties(A, B); 方法时,建议确保 A 和 B 的属性名和类型是匹配的,以避免不必要的错误或数据丢失。如果 A 和 B 的属性不完全匹配,可以考虑使用其他更加灵活的属性复制方式,或者在必要时手动处理属性的复制。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Java-请多指教

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值