• 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与机器学习驱动的微服务设计模式探索
    Java零基础入门看着一篇就够了
    Redis-双写一致性
    c++ 学习 之 const,constexpr,volatile
    Kotlin语言的函数头学习
    2023学生党护眼台灯怎么样选择?盘点公认好用的护眼台灯
    论webpack
    C语言中的指针常量的常量指针
    【电力系统】基于YALMIP 的微网(光伏+风电+蓄电池+微电网+柴油机)优化调度模型附matlab代码
    从零开始学 Docker-容器数据卷实战
  • 原文地址:https://blog.csdn.net/weixin_46039745/article/details/134086018