当前位置: 首页 > news >正文

BeanUtils.copyProperties的用法

常见场景

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

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

传统做法是手动set,即

XxxQuery xxxQuery = new XxxQuery();
xxxQuery .setAxx(xxxReqVo.getAxx());
xxxQuery .setBxx(xxxReqVo.getBxx());
xxxQuery .setCxx(xxxReqVo.getCxx());

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

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

@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(source,target);

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

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

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

http://www.lryc.cn/news/208737.html

相关文章:

  • 【RabbitMQ 实战】12 镜像队列
  • PyCharm社区版安装
  • 【LeetCode每日一题合集】2023.10.16-2023.10.22(只出现一次的数字Ⅲ)
  • 尚硅谷大数据项目《在线教育之实时数仓》笔记003
  • 【Linux】部署单体项目以及前后端分离项目(项目部署)
  • 设计模式之门面模式
  • Postman的使用
  • QGIS008:QGIS拓扑检查、修改及验证
  • 安装DBD-Oracle报错处理
  • 【机器学习】KNN算法-鸢尾花种类预测
  • LuatOS-SOC接口文档(air780E)--lora - lora驱动模块
  • Compose 自定义 - 绘制 Draw
  • c#学习相关系列之构造函数
  • CS224W1.3——图表示的选择
  • rust学习——插件rust-analyzer安装与配置
  • Spring Boot简介
  • Linux下protobuf和 protobuf-c安装使用
  • FastAPI 快速学习之 Flask 框架对比
  • Spring Boot和XXL-Job:高效定时任务管理
  • 3、QtCharts 动态曲线图
  • Linux下自动挂载U盘或者USB移动硬盘
  • 一文通透位置编码:从标准位置编码到旋转位置编码RoPE
  • 八皇后问题
  • UE4/UE5 设置widget中text的字体Outline
  • 漏洞复现-phpmyadmin_SQL注入 (CVE-2020-5504)
  • 安装虚拟机(VMware)保姆级教程及配置虚拟网络编辑器和安装WindowsServer以及宿主机访问虚拟机和配置服务器环境
  • vue表格列表导出excel
  • CSS基础入门03
  • 大数据架构设计理论与实践
  • 2024级199管理类联考之英语二2200核心词汇(第三天)