• BeanUtils.copyProperties的用法


    常见场景

    我们如果有两个具有很多相同属性名的JavaBean对象a和b,想把a中的属性赋值到b,例如

    • 接口中将接收到的前端请求参数XxxReqVo,我们想把这个入参转化为XxxQuery对象作为数据库的查询条件对象

    传统做法是手动set,即

    1. XxxQuery xxxQuery = new XxxQuery();
    2. xxxQuery .setAxx(xxxReqVo.getAxx());
    3. xxxQuery .setBxx(xxxReqVo.getBxx());
    4. xxxQuery .setCxx(xxxReqVo.getCxx());

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

    org.springframework.beans.BeanUtils,它提供了对java反射和自省API的包装。它里面还有很多工具类,这里我们介绍一下该类下面的copyProperties方法,该工具方法可以帮我们大大简化这一步

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

    结果

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

    通过上述测试我们就可以总结出相关结论,基本用法为

    BeanUtils.copyProperties(source,target);
    

    相当于把源对象source的属性值赋给目标对象target中与源对象source的中有着同属性名的属性,如上述案例中Person作为目标对象与源对象User中有着共同的同名属性id,name,age,所以person中的这三个字段被赋值成功,赋值的数据来源正是user对象,sex这个字段是Person类所特有的,所以不会被赋值,同时还要特别注意赋值操作相关类的属性一定要有对应的setter/getter,即

    • 源对象source的属性拷贝值赋给目标对象target的过程中,属性名和属性类型都相同的属性才能被成功拷贝赋值,例如id,name,age这三个目标对象的属性被赋值成功,目标对象中的sex属性,由于源对象中没有同名的属性所以没法被赋值成功。

    • 做赋值的属性一定要有对应的setter/getter才能成功赋值

  • 相关阅读:
    宏电股份AI BOX新产品首次亮相2023中国移动全球合作伙伴大会,以创新性AI、5G技术推动数实共生
    [附源码]计算机毕业设计JAVAjapm青篮汇篮球培训系统
    VoLTE端到端业务详解 | SDP协议
    象棋中的马跳步问题
    Android解析异步消息机制——Android筑基
    Window10运行onnxruntime报错的处理
    解锁横向招聘:创新您的人才搜索
    Vue零碎知识篇
    自定义IDOC配置
    降噪耳机哪款比较好?佩戴舒适的降噪蓝牙耳机推荐
  • 原文地址:https://blog.csdn.net/weixin_46039745/article/details/134086018